Секрети сортування в mysql

Секрети сортування в mysql

Багато з нас знають як робиться сортування в MySQL. Досить в кінці запиту додати ORDER BY з потрібними параметрами. Як параметри пишуться імена стовпців через кому, потім вказується її напрямок по зростанню (ASC) чи спадний (DESC). Але мало хто знає деякі секрети цієї сортування.

Приклад такого запиту:

в даному случає дані з таблиці page будуть відсортовані по полю title в порядку зростання, при цьому якщо значення зійдуться, то ці записи будуть відсортовані по полю date по спадаючій.

Сортування рядків за значеннями чисел

Отже перші з чим я зіткнувся при розробці плагіна рейтингу, в якому необхідно було вивести статті спаданням рейтингу.

У MaxSite, та й в інших CMS метадані сторінки зберігаються в строковому вигляді. У нашому випадку значення рейтингу зберігається в метаданих.

Наш запит виглядає так:

Якщо виконати просту сортування, то результати будуть катастрофічними, так як '11' буде менше '4', порівняння в рядках йде по символьно.

Для того, щоб сортування відбувалася по числовим значенням, необхідно змінити запит наступним чином:

Також є і зворотна операція, але виглядає вона складніше:

Функція left повертає рядок, що містить перші 20 символів з рядка, зазначеної в першому параметрі.

Даний метод звичайно ж зручний, але не варто зловживати ним, так як він призводить до зниження швидкості SQL запитів.

Безпосередньо в MaxSite CMS для виконання такого сортування, в масив $ par перед запитом сторінок, додамо наступне:

потім нижче опишемо функцію ranking

Сортування з урахуванням регістру символів

За замовчуванням сортування для рядків виконується без урахування регістру. У повсякденних завданнях начебто і не потрібна інша сортування, так як заголовна бувка "А" йде після малої "я".

Але якщо все таки така необхідність знадобилася, то робиться це додаванням оператора BINARY:

Сортування по довжині рядків

Також рідко буває необхідно виконувати таке сортування, але реалізується вона теж дуже просто:

Сортування по заданому списку

Буває необхідно впорядкувати таблицю за заданим значенням. Наприклад, якщо в таблиці зберігається інформація про пори року. Таку сортування просто так не вийде, так як розташувати сезони в порядку простий сортуванням вийде, а тільки за алфавітом.

Для цього використовується функція FIELD: