2012-05-07 48 views
0

這個問題可以問之前的地方,但我無法找到它,反正。MySQL選擇評論的朋友,然後其他評論,而按時間順序

所以我有一個視頻記錄有很多評論,每個評論屬於一個用戶。另一方面,用戶有許多用戶朋友。

現在,當用戶X登錄並查看視頻Y時,我想先顯示他的朋友的評論(按最近排序)。然後列出與最近訂購的其他評論。

如果可能的話,我寧願在一個單一的查詢中做這個邏輯。

謝謝,

+2

一些代碼可以使這更容易。 – Nate

回答

2

在你的ORDER BY,做下面的事情。請知道我知道你的模式是什麼樣的,所以這個查詢不起作用。但是,只要創建一個1/0值,指示用戶是否是朋友,然後才能通過,然後再爲了通過發佈/評論ID之後

SELECT 
    posting.id, 
    IF(a.friend_id = b.criteria, 1, 0) AS is_friend 
... 
ORDER BY is_friend DESC, posting.id DESC 
2

這個怎麼樣

Select comment of friends of X on video Y order by date 
Union 
Select comment on video Y where they is not friend of X order by date 
+0

你試過了嗎? 'UNION和ORDER BY'的錯誤使用是你用這種方法得到的結果。 –

+0

[用一個簡單的例子來驗證並不難。](http://sqlfiddle.com/#!2/908c7/1)(可能比我的簡單,但你明白了。) –

+0

什麼我寫了一個主意。如果你想SQL,正確的白色的SQL。 [按照此鏈接編寫語法](http://dev.mysql.com/doc/refman/5.0/en/union.html) 你通過小提琴@AndriyM只是忘了在每個選擇中放入'()'聲明。 –

0

使用UNION。

(
    SELECT 1 AS sort,* 
    FROM comments 
    INNER JOIN friends ON comments.poster_id=friends.friend_id 
    WHERE friends.id='123' 
) 
UNION 
(
    SELECT 2 AS sort,* 
    FROM comments 
    WHERE poster_id NOT IN(SELECT friend_id FROM friend WHERE id='123') 
) 
ORDER BY sort,time DESC 
+0

但是,在兩個子查詢與'UNION'聯合之後,是否保留了順序? –

+0

感謝bitoshi.n,我找到了一個[手冊頁](http://dev.mysql.com/doc/refman/5.0/en/union.html),確認UNION的結果實際上是無序的個別SELECT'具有明確的'ORDER BY'。您需要一個用於整個查詢的'ORDER BY'子句來保證排序。 –

+0

簡單。在ORDER BY語句中添加排序列並將其添加爲優先順序。 –