2013-02-16 20 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最新的时间。