【问题标题】:php/mysql: facebook style newsfeed architecturephp/mysql:facebook风格的新闻提要架构
【发布时间】:2013-12-09 03:13:25
【问题描述】:

想要创建一个基本上按时间戳列出不同事件的 facebook 类型的新闻源。这些事件驻留在不同的表中。我有一些代码可以让我按时间戳从不同的表中订购结果集。我的问题是我不知道将不同表的查询结果组合到一个结果集中的正确方法。我觉得 UNION 可能是这样做的方法,但是,UNION 似乎要求结果集具有相似数量的列、数据类型等,这似乎有点难以执行。

一些帖子建议正确的方法是创建一个单独的新闻源表,但这听起来很麻烦。

这是我目前所拥有的。 Newsfeed 会绘制不同的事件,例如 cmets、发布的照片​​等。 表cmets

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))"

【问题讨论】:

    标签: php mysql feed


    【解决方案1】:

    您可以使用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

    【讨论】:

    • 嗯。那真是太棒了。从来没有意识到可以做到。通常,我会针对另一个表使用某种外部联接的变体。因此,可能是一个包含每种内容类型记录的 CONTENT 表,然后将其外部连接到 cmets 和带有 content_id 指向它的照片。不过,与您的方法有关的一个问题是 photos.id 和 cmets.id 之间可能发生关键冲突
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 2017-12-19
    相关资源
    最近更新 更多