Сортування в mysql кілька рідко використовуваних можливостей, vr-online - безкоштовний електронний

Тобто запит, виконує сортування може виглядати приблизно так.
SELECT * FROM articles ORDER BY a_title ASC. a_date DESC
В цьому випадку записи з таблиці articles будуть відсортовані в порядку зростання по полю a_title, а для записів у яких збігаються значення в поле a_title - по полю a_date в порядку спадання. Саме в такій формі використовуються можливості сортування в більшості випадків. Але зустрічаються ситуації, в яких потрібно використовувати більш складні правила.
Сортування з урахуванням типу даних
Уявіть, що у вас є дві таблиці. Перша містить якісь записи (статті, новини, товари і т.п.), а друга - метадані для цих записів. Метадані можуть містити будь-яку інформацію, наприклад, рейтинг новини або колір товара. При цьому таблиці матимуть приблизно таку структуру.

Таку сортування можна виконати за допомогою наступного запиту
Цей запит виведе всі записи з таблиці articles для яких створено мета-поле color. Очевидно, що тип поля m_value повинен бути текстовим, тому що заздалегідь невідомо що буде зберігатися в метаданих. При цьому числові дані будуть відсортовані неправильно. Справа в тому, що ORDER BY порівнює значення з урахуванням типу поля і, наприклад, при сортуванні по зростанню ви отримаєте наступний ряд значень: «1», «10», «2», «3» і т.д.
Тобто при виконанні такого запиту потрібно вказати, що поле m_value необхідно вважати числовим. Робиться це в такий спосіб.
Зворотна операція (сортування числового поля за правилами текстового) записується трохи складніше.
Функція left повертає рядок, що містить перші N символів з рядка, зазначеної в першому параметрі. Кількість символів (N) задається в другому параметрі. В даному випадку будуть вибрані перші 20 символів (досить щоб перетворити 8-байтное ціле число в рядок). Тобто движок MySQL виконає сортування по рядку, отриманої з значення числового поля.
Хочу попередити, що не дивлячись на те, що дані методи можуть бути зручні в ряді ситуацій, їх використання призводить до зниження швидкості виконання SQL запитів. Тому зловживати ними не варто. З іншого боку, сортування за допомогою PHP (або будь-якого іншого мови) також займе якийсь час.
Сортування тексту з урахуванням регістру
Для текстових полів сортування виконується без урахування регістру. У більшості випадків це правильно, тому що в таблиці символів прописна «А» йде після малої «я». Тобто відсортовані з урахуванням регістра рядка будуть розташовані в наступному порядку.
1. «Мова запитів»
2. «Мова програмування»
3. «Мова Запитів»
Але якщо все-таки сортування потрібно виконати з урахуванням регістра, просто додайте оператор BINARY перед ім'ям поля.
Сортування за фрагментом рядка
Сортування записів по заданому списку значень
Уявіть, що у вас є записи, які якимось чином пов'язані з порою року. І ви зберігаєте цю інформацію в одному з стовпців таблиці. Очевидно, що, використовуючи стандартний варіант сортування (за алфавітом), розташувати сезони порядку «весна», «літо», «осінь», «зима» не вийде. Природно, можна кожному пори року присвоїти свій код, але є й інший варіант рішення - використовувати функцію FIELD.
Ця функція шукає значення, вказане в першому параметрі, серед значень, перерахованих в інших параметрах, і повертає його порядковий номер. При виконанні запиту в перший параметр функції FIELD будуть передаватися значення з поля a_season і, таким чином, записи будуть відсортовані в заданому нами порядку.
Сортування рядків по їх довжині
Ця можливість використовується досить рідко, тому що зазвичай довжина рядка смислового навантаження не несе. Проте, в деяких випадках може стати в нагоді.
Як бачите, «фокус» полягає у використанні функції CHAR_LENGTH, яка визначає кількість символів в рядку.
Думаю, дивлячись на останні кілька рецептів, ви розумієте, що подібним чином можна використовувати практично всі функції MySQL. Мені буде цікаво, якщо ви поділитеся прикладами зі своєї практики