php/mysql:facebook风格的newsfeed架构


php/mysql: facebook style newsfeed architecture

想要创建一个facebook类型的新闻提要,它基本上按时间戳列出不同的事件。这些事件位于不同的表中。我有一些代码可以让我从不同的表中按时间戳排序结果集。我的问题是,我不知道将不同表的查询结果组合成一个结果集的正确方法。我有一种感觉,UNION可能是实现这一点的方法,然而,UNION似乎要求结果集具有相似数量的列、数据类型等,这似乎有点难以执行。

一些帖子建议,正确的方法是用板条箱装一张单独的新闻推送表,但这听起来很麻烦。

这就是我到目前为止所拥有的。Newsfeed绘制了不同的事件,如评论、发布的照片等。表注释

id|comment|timestamp

照片

id|name|timestamp
$sql = "SELECT p.name,p.timestamp from  `photos` p
JOIN
SELECT c.commentc.timestamp from `comments` c 
ORDER GREATEST(IFNULL(p.timestamp,0), IFNULL(c.timestamp,0))"

您可以使用UNION,只在不匹配列的位置使用null

SELECT id, comment, null as name, timestamp FROM comments
UNION
SELECT id, null as comment, name, timestamp FROM photos;

SQLFiddle示例-http://sqlfiddle.com/#!2/f9f40f/1