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

Багато з нас знають як робиться сортування в MySQL. Досить в кінці запиту додати ORDER BY з потрібними параметрами. Як параметри пишуться імена стовпців через кому, потім вказується її напрямок по зростанню (ASC) чи спадний (DESC). Але мало хто знає деякі секрети цієї сортування.
Приклад такого запиту:
в даному случає дані з таблиці page будуть відсортовані по полю title в порядку зростання, при цьому якщо значення зійдуться, то ці записи будуть відсортовані по полю date по спадаючій.
Сортування рядків за значеннями чисел
Отже перші з чим я зіткнувся при розробці плагіна рейтингу, в якому необхідно було вивести статті спаданням рейтингу.
У MaxSite, та й в інших CMS метадані сторінки зберігаються в строковому вигляді. У нашому випадку значення рейтингу зберігається в метаданих.
Наш запит виглядає так:
Якщо виконати просту сортування, то результати будуть катастрофічними, так як '11' буде менше '4', порівняння в рядках йде по символьно.
Для того, щоб сортування відбувалася по числовим значенням, необхідно змінити запит наступним чином:
Також є і зворотна операція, але виглядає вона складніше:
Функція left повертає рядок, що містить перші 20 символів з рядка, зазначеної в першому параметрі.
Даний метод звичайно ж зручний, але не варто зловживати ним, так як він призводить до зниження швидкості SQL запитів.
Безпосередньо в MaxSite CMS для виконання такого сортування, в масив $ par перед запитом сторінок, додамо наступне:
потім нижче опишемо функцію ranking
Сортування з урахуванням регістру символів
За замовчуванням сортування для рядків виконується без урахування регістру. У повсякденних завданнях начебто і не потрібна інша сортування, так як заголовна бувка "А" йде після малої "я".
Але якщо все таки така необхідність знадобилася, то робиться це додаванням оператора BINARY:
Сортування по довжині рядків
Також рідко буває необхідно виконувати таке сортування, але реалізується вона теж дуже просто:
Сортування по заданому списку
Буває необхідно впорядкувати таблицю за заданим значенням. Наприклад, якщо в таблиці зберігається інформація про пори року. Таку сортування просто так не вийде, так як розташувати сезони в порядку простий сортуванням вийде, а тільки за алфавітом.
Для цього використовується функція FIELD: