2013-02-16 53 views
0

下面的代碼適用於我在尋找的內容,但我試圖查看是否有更好的方法來創建高效的新聞Feed。這個新聞源應該選擇最近的評論和/或喜歡等,但只顯示最近的每個用戶(即如果John喜歡2個項目並評論3個項目,只顯示最近的評論和喜歡。在涉及多種的UNION在分組之前尋找更有效的方式與聯盟

SELECT * 
FROM (SELECT username, time, comment FROM comments ORDER BY time DESC) AS temp 
GROUP by username 
UNION 
SELECT * 
FROM (SELECT username, time, likes FROM likes ORDER BY time DESC) AS temp 
GROUP BY username 
ORDER BY time DESC 
LIMIT 10 

回答

0

我認爲你可以JOINusername兩個表,但是這會給你額外的列,而不是工會,像:

SELECT 
    c1.username, 
    c1.`time` AS CommentTime, 
    c1.comment, 
    l1.`time` AS LikeTime, 
    l1.likes 
FROM comments AS c1 
INNER JOIN 
(
    SELECT username, MAX(`time`) LatestTime 
    FROM Comments 
    GROUP BY username 
) AS c2 ON c1.username = c2.username 
     AND c1.`time` = c2.LatestTime 
INNER JOIN Likes l1 ON c1.username = l2.username 
INNER JOIN 
(
    SELECT username, MAX(`time`) LatestTime 
    FROM Likes 
    GROUP BY username 
) AS l2 ON l1.username = l2.username 
     AND l1.`time` = l2.latestTime 
ORDER BY c1.`time` DESC 
LIMIT 10; 

這會給你帶最新評論的username和最新的likes最新的時間。