MySQL按两列顺序再次排序结果

时间:2011-11-17 16:01:07

标签: mysql sql-order-by

我的表有两列我需要排序:

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 个答案:

答案 0 :(得分:6)

如果我理解你的需要,试试这个:

SELECT * FROM your_table
ORDER BY
  CASE
    WHEN content IS NULL THEN 1
    ELSE 0
  END
  ,content,title

答案 1 :(得分:1)

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

或者

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

总是按照标题顺序排列,但内容是第一个(当标题相同时)

答案 2 :(得分:0)

如何先检查content字段是否为空?

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

这将首先放入非空内容行。这一切都取决于你想要达到的目标。

修改:如果合适,请将content = ''替换为content IS null