admin / 09.04.2018
Содержание
Для быстрого извлечения данных моделей в MV используются специальные методы, которые обращаются к конструктору SQL запросов.
Примеры использования конструктора запросов.
Методы модели, использующие конструктор запросов, в качестве параметра все используют массив с параметрами для SQL запроса и обращаются к таблице модели. Если параметры не были переданы (либо передан пустой массив), то будут извлечены (посчитаны) все записи в таблице модели.
Примеры использования
«field» => «value» — параметры вида «ключ-значение» (проверка на равенство)
«field(!=, >, <, >=, <=)» => «value» — параметры вида «ключ-значение» (проверка на неравенство и другие условия)
«fields->» => «`aaa`,`bbb`,`ccc`» — ограничение полей для выборки (по умолчанию берутся все поля таблицы)
//Взять названия и содержания всех активных блоков $rows = $mv -> blocks -> select(array(«active» => 1, «fields->» => «`name`,`content`»));
«field->in» => «1,2,3» — перечисление возможных значений параметра
//Выбрать товары с id равными 3, 64, и 9, которые отображаются в меню $rows = $mv -> products -> select(array(«id->in» => «3,64,9», «in_menu» => 1)); //Выбрать новости из разделов 1,3,4,7 и 12 $rows = $mv -> news -> select(array(«theme->in» => «1,3,4,7,12»));
«field->not-in» => «1,2,3» — перечисление значений, которым не должен удовлетворять параметр
//Выбрать всех клиентов, кроме перечисленных $rows = $mv -> clients -> select(array(«id->not-in» => «3,77,91»));
«field->like» => «abc» — сравнение со строковым значением
//Все клиенты, у которых в фамилии присутствует «иван» $rows = $mv -> clients -> select(array(«last_name->like» => «иван»));
«field->not-like» => «abc» — сравнение с отсутствием строкового значения
//Все страницы, у которых в заголовках отсутствует «магазин» $rows = $mv -> pages -> select(array(«title->not-like» => «магазин»));
«order->asc» => «field», «order->desc» => «field» — сортировка результатов выборки (подробнее в разделе Сортировка)
//Статьи по дате публикации, вначале самые поздние $rows = $mv -> articles -> select(array(«order->desc» => «date»)); //Товары раздела по цене, вначале дешевые $rows = $mv -> products -> select(array(«catalog» => «49», «order->asc» => «price»));
«order->double» => «field->direction» — дополнительная (двойная) сортировка результатов выборки, применяется совместно с «order->asc» => «field» или «order->desc» => «field»
//Статьи по дате публикации и дополнительно по рейтингу, в начале самые популярные $rows = $mv -> articles -> select(array(«order->desc» => «date», «order->double» => «rating->desc»));
«order->in» => «23,5,76,9» — сортировка результатов выборки в порядке следования значений параметра id. Применяется только для СУБД MySQL, при этом запускается конструкция «ORDER BY FIELD (`id`, 23,5,76,9)»
//Товары в порядке следования переданных id $rows = $mv -> products -> select(array(«id->in» => «7,32,56», «order->in» => «7,32,56»));
«order->» => «random» — сортировка результатов выборки в случайном порядке
//3 статьи в случайном порядке $rows = $mv -> articles -> select(array(«order->» => «random», «limit->» => 3));
«limit->» => «value» — ограничение количества результатов выборки (подробнее в разделе Постраничная разбивка)
//3 фотографии, которые доступны для размещение на главной странице $rows = $mv -> photos -> select(array(«index_page» => 1, «limit->» => «3»)); //Последние события, 3 страница при выводе 10 событий на страницу $rows = $mv -> events -> select(array(«order->desc» => «date», «limit->» => «20,10»));
«table->» => «value» — указание таблицы к которой направлен запрос (по умолчанию берется таблица модели, из которой вызывается метод)
«group->by» — группировка результатов по заданному полю (SQL оператор «GROUP BY»)
//Все производители товаров в данном каталоге $conditions = array(«active» => 1, «group->by» => «producer», «parent» => $catalog -> id, «fields->» => «id»); $current_producers = $mv -> products -> selectColumn($conditions);
«extra->» => «sql query» — дополнительные условия запроса в обыкновенном SQL формате. Добавляются после всех условий оператора «WHERE» в SQL запросе. Используется для передачи в запрос сложных условий со скобками и/или условием «OR».
$mv -> photos -> select(array(«active» => 1, «extra->» => «((`type`='ceiling' AND `square`<='38' AND `square`>='7')OR `type` IN('wall', 'table', 'floor'))»));
Внимание! Конструктор запросов используется для быстрого извлечения данных по наиболее распространенным сценариям. Он не охватывает всего многообразия SQL конструкций. Для построения любых SQL запросов используются прямые запросы.
Генератор Ключевых Слов поможет Вам создавать список ключевых слов при составлении семантического ядра, а также для участия в PPC(Pay-Per-Click)-кампаниях(например Google Adwords, Overture или Direct Yandex).
Работа Генератора Ключевых Слов заключается в комбинировании максимально возможного числа словосочетаний. Такой подход позволит Вам увеличить CTR ваших объявлений, что особенно важно, так как CTR – это фактор, определяющий позицию вашего объявления в числе остальных.
Работа этого Генератора проста: Вы создаёте два списка ключевых слов, которые затем комбинируются в один. Например, «купить» и «заказать» в один список, а наименование продуктов в другой – «красную книгу», «зелёную книгу» и т.д.
Результат комбинирования будет следующим:
Также доступна опция, которая вставит в результат исходные ключевые выражения.
1. Выведет список ВСЕХ баз.
SHOW databases;
2. Выведет список ВСЕХ таблиц в Базе Данных base_name.
SHOW tables in base_name;
SELECT – запрос, который выбирает уже существующие данные из БД. Для выбора можно указывать определённые параметры выбора. Например, суть запроса русским языком звучит так — ВЫБРАТЬ такие-то колонки ИЗ такой-то таблицы ГДЕ параметр такой-то колонки равен значению.
1. Выбирает ВСЕ данные в таблице tbl_name.
SELECT * FROM tbl_name;
2. Выведет количество записей в таблице tbl_name.
SELECT count(*) FROM tbl_name;
3. Выбирает (SELECT) из(FROM) таблицы tbl_name лимит (LIMIT) 3 записи, начиная с 2.
SELECT * FROM tbl_name LIMIT 2,3;
4. Выбирает (SELECT) ВСЕ (*) записи из (FROM) таблицы tbl_name и сортирует их (ORDER BY) по полю id по порядку.
SELECT * FROM tbl_name ORDER BY id;
5.
Выбирает (SELECT) ВСЕ записи из (FROM) таблицы tbl_name и сортирует их (ORDER BY) по полю id в ОБРАТНОМ порядке.
SELECT * FROM tbl_name ORDER BY id DESC;
6. Выбирает (SELECT) ВСЕ (*) записи из (FROM) таблицы users и сортирует их (ORDER BY) по полю id в порядке возрастания, лимит (LIMIT) первые 5 записей.
SELECT * FROM users ORDER BY id LIMIT 5;
7.
Выбирает все записи из таблицы users, где поле fname соответствует значению Gena.
SELECT * FROM users WHERE fname=’Gena’;
8. Выбирает все записи из таблицы users, где значение поля fname начинается с Ge.
SELECT * FROM users WHERE fname LIKE ‘Ge%’;
9. Выбирает все записи из таблицы users, где fname заканчивается на na, и упорядочивает записи в порядке возрастания значения id.
SELECT * FROM users WHERE fname LIKE ‘%na’ ORDER BY id;
10. Выбирает все данные из колонок fname, lname из таблице users.
SELECT fname, lname FROM users;
Внимание! Старайтесь указывать конкретные колонки (как в примере 10). Это важно для того, чтобы запросы обрабатывались намного быстрее! |
11. Допустим у Вас в таблице пользовательских данных есть страна. Так вот если Вы хотите вывести ТОЛЬКО список встречающихся значений (чтобы, например, Россия не выводилось 20 раз, а только один), то используем DISTINCT. Выведет, из массы повторяющихся значений Россия, Украина, Беларусь. Таким образом, из таблицы users колонки country будут выведены ВСЕ УНИКАЛЬНЫЕ значения
SELECT DISTINCT country FROM users;
12. Выбирает ВСЕ данные строк из таблицы users где age имеет значения 18,19 и 21.
SELECT * FROM users WHERE age IN (18,19,21);
13. Выбирает МАКСИМАЛЬНОЕ значение age в таблице users. То есть если у Вас в таблице самое большее значение age(с англ. возраст) равно 55, то результатом запроса будет 55.
SELECT max(age) FROM users;
14. Выберет данные из таблицы users по полям name и age ГДЕ age принимает самое маленькое значение.
SELECT name, min(age) FROM users;
15. Выберет данные из таблицы users по полю name ГДЕ id НЕ РАВЕН 2.
SELECT name FROM users WHERE id!=’2′;
INSERT – запрос, который позволяет ПЕРВОНАЧАЛЬНО вставить запись в БД. То есть создаёт НОВУЮ запись (строчку) в БД.
1. Делает новую запись в таблице users, в поле name вставляет Сергей, а в поле age вставляет 25. Таким образом, в таблицу дописывается новая строки с данными значениями. Если колонок больше, то они оставшиеся останутся либо пустыми, либо с установленными по умолчанию значениями.
INSERT INTO users (name, age) VALUES (‘Сергей’, ’25’);
UPDATE – запрос, который позволяет ПЕРЕЗАПИСАТЬ значения полей или ДОПИСАТЬ что-то в уже существующей строке в БД. Например, есть готовая строка, но в ней нужно перезаписать параметр возраста, так как он изменился со временем.
1. В таблице users ГДЕ id равно 3 значение поля age становится 18.
UPDATE users SET age = ’18’ WHERE id = ‘3’;
2. Всё то же самое, что и в первом запросе, просто показан синтаксис запроса, где перезаписываются два поля и более.
В таблице users ГДЕ id равно 3 значение поля age становится 18, а country Россия.
UPDATE users SET age = ’18’, country = ‘Россия’ WHERE id = ‘3’;
DELETE – запрос, который удаляет строку из таблицы.
1. Удаляет строку из таблицы users ГДЕ id равен 10.
DELETE FROM users WHERE id = ’10’;
DROP – запрос, который удаляет таблицу.
1. Удаляет целиком таблицу tbl_name.
DROP TABLE tbl_name;
Любопытные запросы, которые могут пригодиться даже опытным пользователям
SELECT id,name,country FROM users,admins WHERE TO_DAYS(NOW()) — TO_DAYS(registration_date) <= 14 AND activation != ‘0’ ORDER BY registration_date DESC;
Данный сложный запрос ВЫБИРАЕТ колонки id,name,country В ТАБЛИЦАХ users,admins ГДЕ registration_date (дата) не старше 14 дней И activation НЕ РАВНО 0, СОРТИРОВАТЬ по registration_date в обратном порядке (новое в начале).
UPDATE users SET age = ’18+’ WHERE age = ( SELECT age FROM users WHERE male = ‘man’);
Выше указан пример так называемого запроса в запросе в SQL. Обновить возраст среди пользователей на 18+, где пол — мужской. Подобные варианты запроса не рекомендую. По личному опыту скажу, лучше создать несколько отдельных — они будут прорабатываться быстрее.
В MySQL запросы в PHP странице можно вставлять переменные в качестве сравниваемых и тп значений. Пара примеров
1. Выбирает все записи из таблицы users, где поле fname соответствует значению переменной $name.
SELECT * FROM users WHERE fname=’$name’;
2. В таблице users ГДЕ id равно 3 значение поля age изменяется на значение переменной $age.
UPDATE users SET age = ‘$age’ WHERE id = ‘3’;
Внимание! Если Вам интересен какой-либо ещё пример, то пишите вопрос в комментарии!
Query Builder — конструктор запросов — предоставляет удобный, выразительный интерфейс для создания и выполнения запросов к базе данных. Он может использоваться для выполнения большинства типов операций и работает со всеми подерживаемыми СУБД.
Примечание: конструктор запросов Laravel использует средства PDO для защиты вашего приложения от SQL-инъекций. Нет необходимости экранировать строки перед их передачей в запрос.
Вы можете отобрать некоторое количество результатов из выборки:
Вы можете остановить отбор результатов в чанк, вернув из функции-замыкания.
Этот метод вернёт массив всех заголовков (title). Вы можете указать произвольный ключ для возвращаемого массива:
Конструктор запросов может быть использован для выборки данных из нескольких таблиц через JOIN. Посмотрите на примеры ниже.
Вы можете указать более сложные условия:
Внутри можно использовать и :
Иногда вам нужно сделать выборку по более сложным параметрам, таким как «существует ли» или вложенная группировка условий.
Конструктор запросов Laravel справится и с такими запросами.
Команда выше выполнит такой SQL:
Эта команда выше выполнит такой запрос:
Конструктор запросов содержит множество аггрегатных методов, таких как , , , и .
Иногда вам может быть нужно использовать уже готовое SQL-выражение в вашем запросе. Такие выражения вставляются в запрос напрямую в виде строк, поэтому будьте внимательны и не создавайте возможных точек для SQL-инъекций. Для создания сырого выражения используется метод .
Если таблица имеет автоинкрементный индекс, то можно использовать метод для вставки записи и получения её порядкового номера.
Примечание: при использовании PostgreSQL автоинкрементное поле должно иметь имя «id».
Вы также можете указать дополнительные поля для изменения:
Очистка таблицы аналогична удалению всех её записей, а также сбросом счётчика автоинкремент-поля — прим. пер.
Конструктор запросов позволяет создавать слияния двух запросов вместе.
Также существует метод с аналогичными параметрами.
SELECT с ‘shared lock’:
SELECT с ‘lock for update’:
Вы можете легко закэшировать запрос методом :
В этом примере результаты выборки будут сохранены в кэше на 10 минут. В течении этого времени данный запрос не будет отправляться к СУБД — вместо этого результат будет получен из системы кэширования, указанного по умолчанию в вашем файле настроек.
Если система кэширования, которую вы выбрали, поддерживает тэги, вы можете их указать в запросе:
FILED UNDER : IT