Замовте таблицю MySQL у двох стовпцях


228

Як сортувати таблицю MySQL за двома стовпцями?

Мені потрібні статті, відсортовані спочатку за найвищими рейтингами, а потім за останніми датами. Як приклад, це може бути вибірковий вибір (зліва # - це рейтинг, потім назва статті, потім дата статті)

50 | Ця стаття породжує | 4 лютого 2009 року
35 | Ця стаття досить гарна | 1 лютого 2009 року
5 | Ця стаття не така гаряча | 25 січня 2009 року

Відповідний SQL, який я використовую, є:

ORDER BY article_rating, article_time DESC

Я можу сортувати за одним чи іншим, але не тим і іншим.

Відповіді:


480

Сортування за замовчуванням зростає, вам потрібно додати до обох замовлень ключове слово DESC:

ORDER BY article_rating DESC, article_time DESC

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

Я зловмис (-1) * field1, field2 без причини на числових полях ... дякую.
Асад Хасан

hahaha .... не є гарним запитом, тому що якщо ви спробуєте, ніколи не зможете змінити порядок "порожніх" категорій значень ... приємно спробувати в 2009 р., але в 2015 році не працює правильно;), правильне "3
підзапрос

Такий запит не працює в моєму випадку. У цьому випадку я не отримую сортування для вибору міста, окремого міста, країни за замовленням клієнтів за назвою країни, деcм міста;
Pra_A

4
Я не знаю, чому це перевіряється як відповідь, але це не так. Він сортується за першим стовпцем, а потім за другим, але не обома одночасно.
допоміжний

34
ORDER BY article_rating, article_time DESC

буде сортувати за Article_time, лише якщо є дві статті з однаковою оцінкою. З усього, що я бачу на вашому прикладі, саме так і відбувається.

 primary sort                         secondary sort 
1.  50 | This article rocks          | Feb 4, 2009    3.
2.  35 | This article is pretty good | Feb 1, 2009    2.
3.  5  | This Article isn't so hot   | Jan 25, 2009   1.

але врахуйте:

 primary sort                         secondary sort 
1.  50 | This article rocks          | Feb 2, 2009    3.
1.  50 | This article rocks, too     | Feb 4, 2009    4.
2.  35 | This article is pretty good | Feb 1, 2009    2.
3.  5  | This Article isn't so hot   | Jan 25, 2009   1.

Ця відповідь мені допомогла. Дякую @Tomalak
Jayani Sumudini

12
ORDER BY article_rating ASC , article_time DESC

DESCв кінці сортуватимуть обидві стовпці, що спадають. Ви повинні вказати, ASCчи хочете ви інакше


8

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

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

Вибачте, якщо є більш спрощені рішення для виконання цієї роботи, але я не знайшов жодного.

SELECT
 `id`,
 `text`,
 `date`
 FROM
   (
   SELECT
     k.`id`,
     k.`text`,
     k.`date`,
     k.`match_order_id`,
     @row := @row + 1 as `date_order_id`
     FROM
     (
       SELECT
         t.`id`,
         t.`text`,
         t.`date`,
         @row := @row + 1 as `match_order_id`
         FROM
         (
           SELECT
             `art_id` AS `id`,
             `text`   AS `text`,
             `date`   AS `date`,
             MATCH (`text`) AGAINST (:string) AS `match`
             FROM int_art_fulltext
             WHERE MATCH (`text`) AGAINST (:string IN BOOLEAN MODE)
             LIMIT 0,101
         ) t,
         (
           SELECT @row := 0
         ) r
         ORDER BY `match` DESC
     ) k,
     (
       SELECT @row := 0
     ) l
     ORDER BY k.`date` DESC
   ) s
 ORDER BY (1/`match_order_id`+1/`date_order_id`) DESC

34
о боже мій, чому ви публікуєте такий код для такого простого питання.
Бен Сінклер

4

Далі впорядковано ваші дані залежно від обох стовпців у порядку зменшення.

ORDER BY article_rating DESC, article_time DESC

3
Як копія прийнятої відповіді через 4 роки отримує стільки результатів?
Stack згущеного

можливо через пояснення: Р
Різван Хайдер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.