SQL

yii2 Пример миграции с полями в т.ч: decimal, bool (логического), unsigned Not NUll, Defautl value (по умолчанию), внешний ключ


public function safeUp()
{

    //Добавляем все необходимые поля
    $this->createTable($this->tableName, [
        'id' => $this->primaryKey()->notNull(),
        'organization_id' =>  $this->integer()->notNull()
                ->comment('Связь с  организации'),
        'frmo_id' =>   $this->integer()->defaultValue(null)
            ->comment('id здания '),
        'build_name' => $this->string(256)->notNull()
            ->comment('Наименование здания'), // для строк переменной длины, напр. вместо varchar(256)

Вопрос по подзапросам -- вычисляемые поля. Когда и как выполняется подзрапрос, порядок выполнения

Forums:

В учебнике Бена Форта имеется вот такой пример к главе 11 "Использование подзапросов":

SELECT cust_name, cust_state,
(SELECT COUNT(*)
 FROM Orders
 WHERE Orders.cust_id = Customers.cust_id) AS orders
 FROM Customers
 ORDER BY cust_name;

Для ясности поясню - подразумевается выборка количества заказов (которые хранятся в таблице Orders) каждого клиента (список которых хранится в таблице Customers,). Вот отрывок из пояснения к коду:

Кортеж -- что это в программировании

Кортеж -- некий упорядоченный набор элементов фиксированной длины (общее определение).

То есть кортеж -- это несколько элементов выстроенных в строгом порядке, причем их число известно.

В СУБД

В реляционных СУБД под кортежем обычно понимают строку из любой таблицы (она как раз содержит фиксированное число значений, ведь в таких СУБД число колонок в конкретной таблице для любой строки одно и тоже) -- т.е. фактически это набор значений из строки таблицы БД.

SELECT -- структура запроса. Простой пример (sql)

Forums:

Самый простой случай

Самый простой случай -- это выборка из одной конкретной таблицы.

В общем виде схема работы SELECT следующая:

 SELECT  чтовыбираем(имена столбцов)  FROM откуда(т.е. имя таблицы);

Для конкретной реализации могут быть варианты:

mysql table already exists error -- Ошибка Решение

Forums:

table already exists

-- такая ошибка означает, то таблица уже существует.

Если вы разворачиваете учебную базу данных (например эту, но впрочем, это может быть любая другая база), то возможны две ситуации:

  1. вы уже её развернули, а теперь пытаетесь это сделать второй раз (можно просто отказаться от этих попыток и начать работать с базой :)
  2. вы развернули не все таблицы, но какие-то развернули и из-за них возникают ошибки

Как заново развернуть дамп

Чтобы заново развернуть дамп:

sql Добавить в выборку значение (столбец, колонку) из подзапроса (не зависимого) -- добавить ещё одну величину. Пример SQL

Forums:

Например:

SELECT
br.name,  /* этот столбец извлекаем обычно*/
(  			
	SELECT  /* Сколь угодно сложный подзапрос, 
				возвращающий один столбец*/
		sum(CASE WHEN b.budget_plan IS NOT NULL THEN b.budget_plan ELSE 0 END) as plan
	FROM adv_brands br
	LEFT OUTER JOIN adv_booking b ON br.id=b.brand_id
	WHERE br.company_id = 1 AND br.isActive=1
)
as plan, /* для этого столбца используем значения подзапроса*/

FROM adv_brands br
LEFT OUTER JOIN adv_booking_history bh ON bh.booking_id=b.id
   WHERE  br.isActive=1;

mysql Дефис в имени базы данных ("тире") -- SQL запрос (в том числе создание)

Forums:

Если в названии базы есть дефис, то необходимо такую строку окружить обратными кавычками, например:

create database `my-test-base`;

Иначе можно получить ошибку вроде:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '

Источник решения: http://hijarian-sys.blogspot.ru/2011/09/...

Pages

Subscribe to RSS - SQL