我的表有两列我需要排序:
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
答案 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
。