通过单个匹配对MySQL查询进行排序,然后正常

时间:2014-04-20 04:14:25

标签: php mysql sql sorting

我对MySQL查询有点熟悉,但我有一件棘手的事情,我无法弄明白该怎么做。有没有办法告诉系统"首先匹配X条件的任何东西,否则正常订购。"例如,在包含字段posts的表(post_id, author_id, timestamp)中,我知道该怎么做...

mysql_query("SELECT * FROM posts ORDER BY timestamp");

但有没有办法让某个用户的帖子(比如author_id = 5)出现在搜索结果的顶部,然后按照时间戳排序呢?要明确:我想要按author_id排序,我只想隔离author_id具体为5的帖子,然后按timestamp排序其他所有内容。

有办法吗?我试过了,

mysql_query("SELECT * FROM posts ORDER BY author_id = 5, timestamp");

......但它似乎无法发挥作用。

3 个答案:

答案 0 :(得分:4)

试试这个:

SELECT * FROM posts ORDER BY FIELD(author_id, '5') DESC, timestamp

答案 1 :(得分:1)

ORDER BY CASE WHEN author_id=5 THEN 0 ELSE 1 END , timestamp

这适用于大多数 RDBMS ,对于 MySQL 特定用途 @notulysses 的答案。

答案 2 :(得分:0)

我认为Reza的查询类似于:

SELECT  * FROM posts WHERE author_id = 5
UNION ALL
(SELECT * FROM posts WHERE author_id <> 5 ORDER BY timestamp)

这会将author_id 5的结果放在顶部,其余的则按时间戳记。