2017-02-15 7 views
0

Я пытаюсь получить ответы с упорядочением по тексту и метке времени, ели должны быть ответами с текстом = нуль, рядом с текстом, но не нулевым, упорядоченным по ts, но это doesn ' т работы:mysql (mariadb) упорядочивание по двум столбцам не работает

SELECT * FROM answers WHERE user_id = 1279942 ORDER BY text, ts desc; 
+----------+---------+-------------+------------+-------------------------------+--------+ 
| id  | user_id | question_id | ts   | text       | is_new | 
+----------+---------+-------------+------------+-------------------------------+--------+ 
| 81187563 | 1279942 | 30918210 | 1487186969 | NULL       |  0 | 
| 81187560 | 1279942 | 30918209 | 1487117018 | NULL       |  0 | 
| 81187559 | 1279942 | 30918208 | 1487116399 | NULL       |  0 | 
| 81187557 | 1279942 | 30918205 | 1487024673 | Jg jg jg      |  1 | 
| 81187555 | 1279942 | 30918205 | 1487022656 | Jg jg jg      |  1 | 
|  7 | 1279942 | 30915697 | 1397915529 | lf       |  0 | 
| 81187535 | 1279942 | 30915687 | 1397047472 | да       |  0 | 
|  8 | 1279942 | 30915697 | 1397990298 | да все ок      |  0 | 
| 81187543 | 1279942 | 30915688 | 1397047582 | Да ничего      |  0 | 
| 81187561 | 1279942 | 30918206 | 1487186497 | Леха, все супер!    |  1 | 
| 81187556 | 1279942 | 30918205 | 1487022667 | Оп оп       |  1 | 
| 81187558 | 1279942 | 30918207 | 1487186977 | Последний ответ    |  1 | 
| 81187562 | 1279942 | 30917194 | 1487186733 | ТЕСТОВЫЙ ОТВЕТ    |  1 | 
|  1537 | 1279942 | 30917195 | 1413380315 | фыв       |  0 | 
| 81187547 | 1279942 | 30915691 | 1397048820 | щл       |  0 | 
+----------+---------+-------------+------------+-------------------------------+--------+ 
15 rows in set (0.00 sec) 

на 4-й строке должен быть ответ с идентификатором 81187558. Кто знает, что может вызвать его?

ответ

2

непроверенная, но вы могли бы, вероятно, использовать что-то вроде этого, чтобы заказать в моде вы после:

SELECT * FROM answers WHERE user_id = 1279942 
    ORDER BY ISNULL(text) DESC, ts DESC; 

Обратите внимание, что ISNULL() возвращает 0, если значение не равно нулю, и 1, если она есть. Таким образом, отсортировав сначала по убыванию, поместим все записи, где text - NULL наверху. Это создает два ведра, все из которых имеют значение ISNULL. Таким образом, остаток будет отсортирован только ts, так как ISNULL - все 0.

Вначале ваш первоначальный подход сортируется по text, а затем для каждого ведра общих значений text, он сортирует их по умолчанию на ts.

+0

Wow .. Это работает, но в чем разница между использованием isnull и просто упорядочением по столбцу? – kRicha

+0

да, спасибо, теперь понятно! – kRicha

 Смежные вопросы

  • Нет связанных вопросов^_^