Використання конструкції distinct актуально не тільки для вибору унікальних записів. Це хороший спосіб тестування програми. Основна семантична навантаження на ключове слово запиту select distinct MySQL - вибрати тільки ті записи, у яких зазначене поле має унікальне значення.
Можна використовувати декілька полів в одному запиті. Поля можна об'єднувати функції MySQL, застосовувати додаткові умови вибірки і сортування. Використовувати конструкцію group by теж допустимо, але потрібно враховувати, що виникають при цьому невизначеності.
Базові положення і синтаксис
Перевірка та оптимізація: select distinct - один з найбільш затребуваних способів досягнення бажаного. Показовий приклад - таблиця, що містить 99999 записів, які сформовані випадковим чином з трьох масивів:
Формування тестової таблиці ex_workers виконано за допомогою функції PHP rand (010). У кожному масиві рівно 11 елементів. Природно, що рівномірно розподілена випадкова величина на кількості записів 99999 не може допустити хоча б одне відсутність first_name на всіх last_name і навпаки.
Зрозуміло, ймовірність залишається, але для кожного унікального імені в масиві $aWorkersF, швидше за все, буде рівно одинадцять варіантів $aWorkersL. В даному випадку в цілях тестування сумніви у вихідному наборі даних, як і багаторазова його генерація - хороше рішення. Ідеальні набори даних - не найкращий засіб перевірки алгоритмів.
Результати виконання запитів (1) і (2) - перша і друга колонки - показують, що дійсно для кожного унікального значення first_name є одинадцять значень last_name і навпаки. При цьому крайня права колонка довше одинадцяти рядків і має 121 рядок - при запиті (3) і запиті (4).
Перерахування полів distinct `first_name`, `last_name` еквівалентно distinct concat (`first_name`, `last_name`). Однак це не загальний випадок, а приватне рішення.
Основний зміст запиту MySQL select c distinct
Звичайна практика: у таблицях завжди є повторювані поля. Без цього істотного обставини реляційні бази даних, просто не існують . У прикладі таблиця містить ключове поле i_status і його сенс w_status. Це посада, яку займає працівник.
В ідеалі поля i_status і w_status повинні бути оформлені у вигляді окремої таблиці, а в таблиці ex_workers повинно залишитися тільки ключове поле i_status, за яким завжди можна отримати найменування посади. Тут саме таке рішення наведено як приклад. Виконавши запит select distinct на цих двох полях, можна отримати всі необхідні дані для формування селектора на веб-сторінці. Такий селектор дозволить вибирати відображуваних співробітників займаним ними посадам. Це може бути не селектор, а шапка таблиці або вісь графіка статистики затребуваності працівників по тій чи іншій спеціальності. Не можна сказати, що основний сенс вибору унікальних записів - це виключно селектори, шапки таблиць або осі координат, але це надзвичайно часте призначення та вживання конструкції select distinct.
Унікальність на динамічних даних
Обробка інформації - це багато в чому пошук потрібної для прийняття правильного рішення. Аналіз умов можна проводити засобами PHP або іншої мови програмування, але, як правило, вся первинна інформація відразу записується в таблиці бази даних. Це вже давно не традиція, а нормальна пам'ять для сучасного сайту. Пам'ять у форматі реляційної бази даних - відмінне і практичне рішення.
У конструкції select distinct з'являється велика сфера застосування - прийняття безумовних рішень, якщо проектувати створення динамічних таблиць в процесі роботи сайту, наприклад: парсинг сторінок; відстеження поведінки відвідувачів; формування периметра безпеки шляхом аналізу відхилень від встановленого (прийнятного) характеру дій співробітників. Плануючи прості алгоритми аналізу інформації, що надходить, записуючи первинний результат в таблицю, можна завжди мати адекватне рішення за простим запитом select distinct.
Простота таблиць і сутність реляційної логіки
Колись програмування та створення баз даних нагадувало будівництво залізниць і гостировалось. В основному цей варіант прогресу в науково-технічній галузі був прерогативою соціалістичної економіки, але і Кремнієва долина теж встигла відзначитися в цьому питанні.
Сьогодні - чим простіше, тим краще. Все рідше стали з'являтися питання про те, як зробити select distinct на десятці поля з кількох таблиць одночасно. Кваліфікована розробка стала ставитися до створення баз даних з гранично простий точки зору: якщо один розробник зробив базу даних або запит до таблиці, то інший розробник повинен зрозуміти зроблене з півслова. Якщо для розуміння організації даних і вибірки інформації потрібно робити хоч якісь помітні розумові або тимчасові зусилля - це об'єктивне підставу переглянути результати виконаної роботи.