制作用户个人资料活动Feed

时间:2010-06-23 21:22:43

标签: mysql android-activity feed

我需要构建一个活动Feed,以便在每个用户个人资料页面上显示他们在网站上所做的事情。

有三个表:评论,评分,用户

我希望Feed包含用户发布的评论和评分。

在评论和评级表中,它存储发布它的用户的用户ID,而不是用户名,因此对于新闻Feed中的每个项目,它需要从用户表中选择用户ID相同的用户表。检索用户名。

Feed中的所有条目都应按日期排序。

即使我知道这是不正确的,这也是我得到的,因为它试图将两者都与users表中的同一行匹配。

SELECT comments.date, comments.url AS comment_url, comments.user_id, ratings.date, ratings.url AS rating_url, ratings.user_id, users.id, users.username
FROM comments, ratings, users
WHERE comments.user_id=%s
AND comments.user_id=users.id
AND ratings.user_id=%s
AND ratings.user_id=users.id
ORDER BY ratings.date, comments.date DESC

1 个答案:

答案 0 :(得分:3)

JOIN。看来你知道,但这是如何:     SELECT * FROM comments LEFT JOIN用户ON comments.user_id = users.id

因此,据我所知,你试图同时订购两件不同的东西。我认为最接近的是:

(SELECT comments.date AS date, users.username AS name, comments.url AS url CONCAT('Something happened: ',comments.url) AS text 
    FROM comments LEFT JOIN users ON comments.user_id = users.id 
    WHERE users.id = %s)
UNION
(SELECT ratings.date AS date, users.username AS name, ratings.url AS url CONCAT('Something happened: ',ratings.url) AS text
    FROM comments LEFT JOIN users ON comments.user_id = users.id 
    WHERE users.id = %s)
ORDER BY date DESC LIMIT 0,10

请注意,union的两个部分的列都匹配。我很确定这样做是必要的。这就是为什么我有这个CONCAT语句,它允许你构建一个在评级和评论之间不同的字符串。