2014-04-20 51 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的結果上方,那麼其餘的都是通過時間戳。

相關問題