2014-04-20 45 views
4

我对MySQL的查询很熟悉,但我有一个棘手的问题,我不知道该怎么做。有没有办法告诉系统“任何匹配的X条件第一,否则顺序正常。”例如,在一个表中posts与领域(post_id, author_id, timestamp)我知道该怎么办......通过单个匹配对MySQL查询进行排序,然后通常是

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"); 

......但它似乎没有工作。

回答

4

试试这个:

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

它似乎正在工作,除了它将匹配的行('author_id = 5'行)放在结果的底部而不是顶部。 “FIELD()”后面的一个'DESC'运行得非常好。谢谢! – Nerrolken

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

这适用于大多数RDBMS的,用于MySQL的 specfic使用@notulysses的答案。

0

我认为礼的查询看起来是这样的:

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

这将会把author_id 5的结果上方,那么其余的都是通过时间戳。

相关问题