這個問題可以問之前的地方,但我無法找到它,反正。MySQL選擇評論的朋友,然後其他評論,而按時間順序
所以我有一個視頻記錄有很多評論,每個評論屬於一個用戶。另一方面,用戶有許多用戶朋友。
現在,當用戶X登錄並查看視頻Y時,我想先顯示他的朋友的評論(按最近排序)。然後列出與最近訂購的其他評論。
如果可能的話,我寧願在一個單一的查詢中做這個邏輯。
謝謝,
這個問題可以問之前的地方,但我無法找到它,反正。MySQL選擇評論的朋友,然後其他評論,而按時間順序
所以我有一個視頻記錄有很多評論,每個評論屬於一個用戶。另一方面,用戶有許多用戶朋友。
現在,當用戶X登錄並查看視頻Y時,我想先顯示他的朋友的評論(按最近排序)。然後列出與最近訂購的其他評論。
如果可能的話,我寧願在一個單一的查詢中做這個邏輯。
謝謝,
在你的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
這個怎麼樣
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
你試過了嗎? 'UNION和ORDER BY'的錯誤使用是你用這種方法得到的結果。 –
[用一個簡單的例子來驗證並不難。](http://sqlfiddle.com/#!2/908c7/1)(可能比我的簡單,但你明白了。) –
什麼我寫了一個主意。如果你想SQL,正確的白色的SQL。 [按照此鏈接編寫語法](http://dev.mysql.com/doc/refman/5.0/en/union.html) 你通過小提琴@AndriyM只是忘了在每個選擇中放入'()'聲明。 –
使用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
但是,在兩個子查詢與'UNION'聯合之後,是否保留了順序? –
感謝bitoshi.n,我找到了一個[手冊頁](http://dev.mysql.com/doc/refman/5.0/en/union.html),確認UNION的結果實際上是無序的個別SELECT'具有明確的'ORDER BY'。您需要一個用於整個查詢的'ORDER BY'子句來保證排序。 –
簡單。在ORDER BY語句中添加排序列並將其添加爲優先順序。 –
一些代碼可以使這更容易。 – Nate