MySQL упорядочить по двум столбцам и снова упорядочить результаты - PullRequest
5 голосов
/ 17 ноября 2011

В моей таблице есть два столбца, которые мне нужно отсортировать по:

content title

Только некоторые строки имеют данные в столбце content, но все имеют некоторые в столбце title. Мне нужно отсортировать эти строки так, чтобы те с данными в столбце content были первыми. Я могу сделать это:

ORDER BY content DESC, title ASC

Однако эти верхние строки, возвращаемые из-за их столбца content, также должны быть отсортированы в алфавитном порядке по их title (а не по их содержимому, которое, как я предполагаю, происходит).

Идеи? Спасибо.

Обновление:

Следует отметить, что title - это VARCHAR, а content - это TEXT. Итак, произвольный текст. content столбец пуст, если нет содержимого, не NULL.

Так, например:

`title`     `content`
title a
title b      this has content
title c      so does this
title d

Заказ будет:

title c
title b
title a
title d

Ответы [ 3 ]

6 голосов
/ 17 ноября 2011

Если я понимаю, что вам нужно, попробуйте это:

SELECT * FROM your_table
ORDER BY
  CASE
    WHEN content IS NULL THEN 1
    ELSE 0
  END
  ,content,title
1 голос
/ 17 ноября 2011
ORDER BY (content='') DESC, title ASC

или, может быть,

ORDER BY title ASC,(content='') DESC

, поэтому всегда в порядке заголовка, но те, которые имеют содержание, стоят первыми (если заголовок совпадает)

0 голосов
/ 17 ноября 2011

Как насчет проверки, является ли поле content пустым первым?

ORDER BY if(content = '', 0, 1), content, title

Сначала будут помещены непустые строки содержимого. Все зависит от того, чего вы хотите достичь.

Редактировать: заменить content = '' на content IS null, если необходимо.

...