Как получить строки из таблицы MySQL с двумя полями для сортировки по? - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть таблица в MySQL с полями:

  • id - int;
  • date - datetime;
  • rating - decimal (3,2 );

и т. Д. В этом выборе другие поля не обязательны.
В таблице около 6000 строк.
Мне нужно получить строки из упорядоченной таблицы по рейтингу AS C за последние 6 месяцев, а затем по другим строкам, упорядоченным по идентификатору AS C.
Как я могу это сделать? Будет ли это работать быстро?

Ответы [ 2 ]

1 голос
/ 02 февраля 2020

Я бы сделал что-то подобное, чтобы добиться этого:

select * 
  from tbl
 order by case 
          when date >= DATE_ADD(curdate(), INTERVAL -6 MONTH) then 
               rating 
          else id 
           end ASC;
0 голосов
/ 03 февраля 2020

Вы должны убедиться, что все записи за последние 6 месяцев находятся на первом месте в результате, а затем беспокоиться о заказе по rating или id. Вы можете сделать это, заказав сначала логическое значение

date >= CURDATE() - INTERVAL 6 MONTH

, а затем либо rating, либо id в зависимости от ситуации. Например:

SELECT *
FROM data
ORDER BY date >= CURDATE() - INTERVAL 6 MONTH DESC,
         CASE WHEN date >= CURDATE() - INTERVAL 6 MONTH THEN rating
              ELSE id
         END
...