admin / 09.04.2018

Конструктор sql запросов

Содержание

Конструктор запросов

Для быстрого извлечения данных моделей в MV используются специальные методы, которые обращаются к конструктору SQL запросов.

Примеры использования конструктора запросов.

Методы модели, использующие конструктор запросов, в качестве параметра все используют массив с параметрами для SQL запроса и обращаются к таблице модели. Если параметры не были переданы (либо передан пустой массив), то будут извлечены (посчитаны) все записи в таблице модели.

  • select() — возвращает ассоциированный массив записей (рядов, массивов) из базы данных, удовлетворяющих условиям поиска
  • selectOne() — возвращает ассоциированный массив, с полями одной записи
  • selectColumn() — возвращает обыкновенный массив со значениями нужной колонки, параметр «fields->» обязателен
  • countRecords() — возвращает целое число, которое является количеством полей удовлетворяющих заданным условиям
  • findRecord() — тоже что и selectOne(), но если искомая запись была найдена то ее id помещается в свойство «id» текущей модели и возвращается объект класса Record для удобной работы с данными. Если запись не найдена, то вернется false.
  • findRecordById($id) — тоже что и findRecord(), только с единственным параметром id нужной записи. Единственным аргументом является целое число — id искомой записи. Возвращается объект класса Record, либо false если запись не найдена.

Примеры использования

Параметры для конструктора 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).

JDatabaseQuery — конструктор SQL-запросов

Работа Генератора Ключевых Слов заключается в комбинировании максимально возможного числа словосочетаний. Такой подход позволит Вам увеличить CTR ваших объявлений, что особенно важно, так как CTR – это фактор, определяющий позицию вашего объявления в числе остальных.

Работа этого Генератора проста: Вы создаёте два списка ключевых слов, которые затем комбинируются в один. Например, «купить» и «заказать» в один список, а наименование продуктов в другой – «красную книгу», «зелёную книгу» и т.д.

Результат комбинирования будет следующим:

  • купить красную книгу
  • заказать красную книгу
  • купить зелёную книгу
  • заказать зелёную книг

Также доступна опция, которая вставит в результат исходные ключевые выражения.

 

 

Статьи / MySQL /

Примеры SQL запросов к базе данных MySQL


Содержание статьи
1. Самые простые MySQL запросы
2. Простые SELECT (выбрать) запросы
3. Простые INSERT (новая запись) запросы
4. Простые UPDATE (перезаписать, дописать) запросы
5. Простые DELETE (удалить запись) запросы
6. Простые DROP (удалить таблицу) запросы
7. Сложные MySQL запросы
8. MySQL запросы и переменные PHP

1. Самые простые SQL запросы

1. Выведет список ВСЕХ баз.

SHOW databases;
2. Выведет список ВСЕХ таблиц в Базе Данных base_name.

SHOW tables in base_name;

2. Простые SELECT (выбрать) запросы к базе данных MySQL

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.

FluentPDO — умный конструктор SQL запросов

Выбирает (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′;

3. Простые INSERT (новая запись) запросы

INSERT – запрос, который позволяет ПЕРВОНАЧАЛЬНО вставить запись в БД. То есть создаёт НОВУЮ запись (строчку) в БД.

1. Делает новую запись в таблице users, в поле name вставляет Сергей, а в поле age вставляет 25. Таким образом, в таблицу дописывается новая строки с данными значениями. Если колонок больше, то они оставшиеся останутся либо пустыми, либо с установленными по умолчанию значениями.

INSERT INTO users (name, age) VALUES (‘Сергей’, ’25’);

4. Простые UPDATE запросы к базе данных MySQL

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’;

5. Простые DELETE (удалить запись) запросы к базе данных MySQL

DELETE – запрос, который удаляет строку из таблицы.

1. Удаляет строку из таблицы users ГДЕ id равен 10.

DELETE FROM users WHERE id = ’10’;

6. Простые DROP (удалить таблицу) запросы к базе данных MySQL

DROP – запрос, который удаляет таблицу.

1. Удаляет целиком таблицу tbl_name.

DROP TABLE tbl_name;

7. Сложные запросы к базе данных MySQL

Любопытные запросы, которые могут пригодиться даже опытным пользователям

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+, где пол — мужской. Подобные варианты запроса не рекомендую. По личному опыту скажу, лучше создать несколько отдельных — они будут прорабатываться быстрее.

8. Запросы к базе данных MySQL и PHP

В 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’;

Внимание! Если Вам интересен какой-либо ещё пример, то пишите вопрос в комментарии!

 

Похожие статьи

Комментарии к статье (vk.com)

Конструктор запросов

Введение

Query Builder — конструктор запросов — предоставляет удобный, выразительный интерфейс для создания и выполнения запросов к базе данных. Он может использоваться для выполнения большинства типов операций и работает со всеми подерживаемыми СУБД.

Примечание: конструктор запросов Laravel использует средства PDO для защиты вашего приложения от SQL-инъекций. Нет необходимости экранировать строки перед их передачей в запрос.

Выборка (SELECT)

Получение всех записей таблицы

Ограничение результатов выборки

Вы можете отобрать некоторое количество результатов из выборки:

Вы можете остановить отбор результатов в чанк, вернув из функции-замыкания.

Получение одной записи

Получение одного поля из записей

Получение списка всех значений одного поля

Этот метод вернёт массив всех заголовков (title). Вы можете указать произвольный ключ для возвращаемого массива:

Указание полей для выборки

Добавление полей к созданному запросу

Использование фильтрации WHERE

Условия ИЛИ:

Фильтрация по интервалу значений

Фильтрация по совпадению с массивом значений

Поиск неустановленных значений (NULL)

Использование By, Group By и Having

Смещение от начала и лимит числа возвращаемых строк

Объединения (JOIN)

Конструктор запросов может быть использован для выборки данных из нескольких таблиц через JOIN. Посмотрите на примеры ниже.

Простое объединение

Объединение типа LEFT JOIN

Вы можете указать более сложные условия:

Внутри можно использовать и :

Сложные выражения WHERE

Иногда вам нужно сделать выборку по более сложным параметрам, таким как «существует ли» или вложенная группировка условий.

Конструктор запросов для SQL

Конструктор запросов Laravel справится и с такими запросами.

Группировка условий

Команда выше выполнит такой SQL:

Проверка на существование

Эта команда выше выполнит такой запрос:

Аггрегатные функции

Конструктор запросов содержит множество аггрегатных методов, таких как , , , и .

Использование аггрегатных функций

Сырые SQL-выражения

Иногда вам может быть нужно использовать уже готовое SQL-выражение в вашем запросе. Такие выражения вставляются в запрос напрямую в виде строк, поэтому будьте внимательны и не создавайте возможных точек для SQL-инъекций. Для создания сырого выражения используется метод .

Использование SQL-выражения в конструкторе запросов

Вставка (INSERT)

Вставка записи в таблицу

Вставка записи и получение её нового ID

Если таблица имеет автоинкрементный индекс, то можно использовать метод для вставки записи и получения её порядкового номера.

Примечание: при использовании PostgreSQL автоинкрементное поле должно иметь имя «id».

Вставка нескольких записей одновременно

Обновление (UPDATE)

Обновление записей в таблице

Увеличение или уменьшение значения поля

Вы также можете указать дополнительные поля для изменения:

Удаление (DELETE)

Удаление записей из таблицы

Удаление всех записей

Очистка таблицы

Очистка таблицы аналогична удалению всех её записей, а также сбросом счётчика автоинкремент-поля — прим. пер.

Слияние (UNION)

Конструктор запросов позволяет создавать слияния двух запросов вместе.

Также существует метод с аналогичными параметрами.

Блокирование (lock) данных

SELECT с ‘shared lock’:

SELECT с ‘lock for update’:

Кэширование запросов

Вы можете легко закэшировать запрос методом :

Кэширование запросов

В этом примере результаты выборки будут сохранены в кэше на 10 минут. В течении этого времени данный запрос не будет отправляться к СУБД — вместо этого результат будет получен из системы кэширования, указанного по умолчанию в вашем файле настроек.

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

FILED UNDER : IT

Submit a Comment

Must be required * marked fields.

:*
:*