Як зробити виборку SELECT PDO
Загальна структура запиту виглядає так:
SELECT ('стовпці або * для вибору всіх стовпців; обов'язково')
FROM ('таблиця; обов'язково')
WHERE ('умова/фільтрація, наприклад, city = 'Moscow'; необов'язково')
GROUP BY ('стовпець, яким хочемо згрупувати дані; необов'язково')
HAVING ('умова/фільтрація на рівні згрупованих даних; необов'язково')
ORDER BY ('стовпець, яким хочемо відсортувати висновок; необов'язково')
SELECT поле1, поле2, поле3 from імя_таблиці
[WHERE умова]
[GROUP BY {імя_стовця}]
[HAVING додаткова умова_where]
[ORDER BY {імя_стовбця} {ASC | DESC}, ...] [LIMIT{OFFSET M}{LIMIT N}]
Це універсальна синтаксична конструкція, яка використовується для отримання даних із однієї таблиці:
- поля
поле1
таполе2
є іменами стовпців таблиці. Для вилучення всіх стовпців з таблиці можна використовувати вираз*
; - ім'я_таблиці задає ім'я таблиці, з якої необхідно витягти дані;
- оператор
WHERE може використовуватися для завдання будь-якої умови в одному і декількох стовпцях;
- функція
GROUP BY
використовується з агрегатними функціями для групування результуючих наборів; - пропозиція
HAVING
необхідно післяGROUP BY
для фільтрації на основі умов для групи рядків або агрегатів. Якщо ми використовуємо пропозиціюHAVING
безGROUP BY
, вона буде діяти аналогічно операторуWHERE
; - пропозиція
ORDER BY
використовується для сортування результуючих наборів таблиці за зростанням або зменшенням; LIMIT
використовується для обмеження кількості рядків, що повертаються операторомSELECT
Оператор WHERE - є необов'язковою частиною запиту SELECT. Для вказівки умов можна використовувати оператори AND чи OR. Оператор WHERE також може використовуватись із запитом DELETE та UPDATE,
SELECT * FROM 'users' WHERE 'city' = 'New York';
SELECT * FROM 'users' WHERE 'login_attempts' > 2;
Ключове слово UNION - використовується для об'єднання кількох запитів SELECT в одну таблицю. Кожен оператор SELECT, який використовується у запиті UNION, повинен мати однакову кількість стовпців, а для кожного стовпчика потрібен однаковий тип даних. Імена стовпців з першого запиту SELECT використовуються як стовпці для результатів, що повертаються.
SELECT 'Employee' As Type, name, city, country FROM Employee
UNION
SELECT 'Contractor', name, city, country FROM Contractor;
----- АБО :----------
SELECT country
FROM Employee
UNION SELECT country FROM Contractor;
Оператор LIKE - надає простий спосіб пошуку записів у стовпці з різними шаблонами. У запиті можна використовувати символи для встановлення різних шаблонів. В основному використовується два види символів підстановки. Давайте розглянемо кожен із них на прикладі.
%
(відсоток): використовуйте цей символ підстановки для пошуку нуль або будь-яких символів. Припустимо, що ми хочемо відшукати користувачів, чиє ім'я починається з «a». Тоді ми можемо застосувати цей підстанувальний символ, як показано в наведеному нижче запиті.select * from users where username like 'a%';
У разі якщо ми хочемо знайти користувачів, чиє ім'я починається з «a» і зазакінчується на «s», то запит із підстановковим символом % буде таким:
select * from user where username like 'a%s';
_
(підкреслення): використовуйте цей символ підстановки л там, де потрібно знайти записи з шаблоном, де в тому місці, де ми вказали підкреслення (_
), може бути будь-який символ. Припустимо, ми хочемо знайти користувачів, ім'я яких закінчується на dmin, і ми не впевнені в першому символі. Отже, наведений нижче запит буде шукати результати, де перший символ імені користувача може бути будь-яким, але він повинен закінчуватися на dmin.select * from users where username like '_dmin';
Важливо пам'ятати, що він буде враховувати рівно один символ для одного підкреслення. Отже, в цьому випадку користувач з ім'ям користувача як «aadmin» не буде розглядатися, тому що в запиті вказано лише один символ підстановки з підкресленням.
IN/NOT IN
Оператор IN
використовується для порівняння кількох значень оператора WHERE
. Наприклад, наступний нижче запит використовується для пошуку всіх користувачів, що мають місто new york або chicago:
select * from users where city IN ( 'new york','chicago')
Оператор NOT IN
працює навпаки, наприклад, щоб знайти всіх користувачів, у яких немає ні міста new york< /em>, ні міста chicago, використовується:
select * from users where city NOT IN ('new york','chicago');
BETWEEN
Оператор BETWEEN
може використовуватися в тому випадку, коли ми хочемо отримати записи, які входять у певний діапазон. Цей діапазон може бути будь-яким, таким як текст, дати або цифри. Припустимо, ми хочемо відшукати користувачів, дата створення запису про які знаходиться між 1 липня та 16 липня 2017 року. Тоді наведений нижче запит із пропозицією BETWEEN
може нам допомогти.
select * from users where created_at BETWEEN '2017-07-01 00:00:00' AND '2017 -07-16 00:00:00';
Таким чином ми можемо також задавати діапазон у числах для пошуку користувачів, які належать до цього конкретного діапазону. Наприклад, якщо ми хочемо отримати студентів, оцінки яких знаходяться в діапазоні від 70 до 80, то оператор BETWEEN
може бути застосований для визначення діапазону.
Пропозиція ORDER BY
Пропозиція ORDER BY
допомагає в отриманні записів у впорядкованому вигляді. Воно забезпечує сортування даних по певному стовпцю в порядку зростання або зменшення. За умовчанням сортування виконується в порядку зростання, але ми також можемо явно вказати спосіб сортування за допомогою ключових слів ASC
та DESC
. Якщо ми задамо ASC
, то воно буде сортувати в порядку зростання, тоді як ключове слово DESC
буде сортувати в порядку спадання. Нижче наведено запит, який знайде всіх користувачів і виведе їх у порядку зростання по стовпцю city.
SELECT * FROM users ORDER BY city ASC;
Крім того, за допомогою пропозиції ORDER BY
можна сортувати в кількох стовпцях. Як показано в наведеному нижче запиті, де ми впорядковуємо по стовпцях city та username, ми можемо передати кілька стовпців.
SELECT * FROM users ORDER BY city, username;
Пропозиція LIMIT
Використовуючи пропозицію LIMIT
, ми можемо отримати тільки кілька рядків з великих блоків даних. Це допомагає обмежити кількість рядків, що повертаються у результуючому наборі. Припустимо, що в таблиці існують тисячі рядків, але нам потрібно лише 10 записів, тоді замість вилучення тисяч записів ця пропозиція допомагає отримати лише 10 записів. Це дійсно допомагає налаштовувати продуктивність при пошуку великих наборів даних.
З пропозицією LIMIT
можна передавати один або два аргументи. У разі двох аргументів один з них буде зміщенням, яке задає зрушення першого повернення рядка від початку. У той час як другий аргумент буде кількістю, яка задає максимальну кількість рядків, які будуть повернуті. Цей аргумент має бути нульовим чи позитивним. Погляньте на наведений нижче запит, де ми витягли 10 записів з таблиці користувачів, починаючи з 5-го рядка.
SELECT * FROM users limit 5, 10;
< p>Якщо з пропозицією LIMIT
вказати всього один аргумент, то аргумент буде вважатися кількістю рядків. Наприклад, наступний нижче запит використовується для вилучення 10 рядків з таблиці користувачів:
SELECT * FROM users limit 10;
На даний момент ми бачили отримання даних з однієї таблиці; якщо ми хочемо отримати дані з декількох таблиць, використовуються ключові слова JOIN
та UNION
.
=======================
=================
Виборка/SELECT в класі. Зразок класу "MainStatistics":
use Ardilla\Core\Database\ArdillaPDO;
class MainStatistics
{
//I๑==⮞ Зєднання з PDO
public function __construct(protected ArdillaPDO $connection) {}
/*====================================
๑۩۩๑==▛ ВИБОРКА З БД ▜=== SELECT ======================================================================
=====================================*/
public function selectBD()
{
//I๑==⮞ РОбимо ⮜ ВИБОРКУ ⮞ в ТАБЛИЦЮ: "ard_zlog"
// SELECT - Які стовпчики вибираємо
// FROM - Таблиця в якій робимо виборку
// WHERE - Умова при якій виконається виборка
$result = $this->connection->query("
SELECT id_login, data, position
FROM ard_zlog;
")->fetchAll(PDO::FETCH_ASSOC);
return $result;
}
}
В потрібному нам місці виводимо:
//I๑==⮞ підключаємо наш клас і створюємо обєкт
include_once __DIR__ . "/a-class/MainStatistics.php";
$model = new MainStatistics(\Ardilla::connection());
$result = $model->selectBD();
/*--------*/
print_r($result);
/*----РЕЗУЛЬТАТ:----*/
Array
(
[0] => Array
(
[id_login] => 1
[data] => 2010-10-20
[position] => 2
)
)
Приклади запитів SELECT:
Порахувати кількість записів у таблиці:
//В одній таблиці
$result = $this->connection->query("
SELECT count(*)
FROM ard_users
")->fetchAll(PDO::FETCH_ASSOC);
return $result;
//Сумуємо результати із двох таблиць
$result = $this->connection->query("
SELECT count(*)
FROM ard_aa_lang,ard_users
")->fetchAll(PDO::FETCH_ASSOC);
return $result;
//Отримуємо результати із кожної таблиці окремо
$result = $this->connection->query("
SELECT count(*) FROM ard_aa_lang
UNION
SELECT count(*) FROM ard_users
")->fetchAll(PDO::FETCH_ASSOC);
return $result;