我对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");
......但它似乎无法发挥作用。
答案 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的结果放在顶部,其余的则按时间戳记。