😎 » PHP - FAQ » PHP PDO MySQL » Як зробити виборку SELECT PDO
92 0  

Як зробити виборку 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;






Залишити свій коментар:

Досвід у веброзробці:

2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2009
2023