У меня есть таблица данных, как этотMYSQL на случай, когда
----------------------------------------------------------
| userID | dateTime | val1 | val2 |
----------------------------------------------------------
| abc | 2014-10-20 00:00:00 | 21.5 | 18.5 |
| ijk | 2014-10-21 00:00:00 | 22.5 | 17.5 |
| pqr | 2014-10-22 00:00:00 | 23.5 | 16.5 |
| xyz | 2014-10-23 00:00:00 | 24.5 | 14.5 |
----------------------------------------------------------
Я хочу, чтобы отсортировать таблицу по dateTime
в desc order
по val1
в asc order
и val2
в asc order
, но если ID спичек пользователя Я хочу эту строку сверху всегда не зависит от другого поля.
Для этого у меня есть запрос, как этот
Select *
from mytable
order by case
when userID = 'abc' then 1
else 'ordeyByField' end 'order';
WHERE orderByField = dateTime or val1 or val2
For dateTime, order = desc
and
for val1 or val2, order = asc
Когда я отсортировать его с знач1 или знач2 это нормально (потому что порядок по возрастанию), но когда я сортировать его с DateTime он показывает совпадающую USERID строку в последнем (потому что порядок desc). Я хочу, чтобы совпадающая строка userID была сверху.
Надеюсь, я объяснил свое требование. Пожалуйста, дайте мне знать, если вам нужно больше объяснений.
Заранее спасибо
идеальный .. Вот что я хотел ... Большое спасибо :) –
На самом деле это функция FIELD()! – Strawberry
@Strawberry: вы можете использовать 'FIELD (userID, 'abc') desc' здесь, но пока мы имеем дело только с одним значением, я бы рассматривал это как альтернативу, не более того. Однако, с большим количеством значений для ранжирования, FIELD определенно будет предпочтительным для конструкций case. –