如何构造此SQL查询。组合多个表?

时间:2011-09-24 11:53:43

标签: php sql

注意:这不是my other question 的副本。我已经更改了表结构,需要有新查询的新帮助。

所以基本上我收到了关于我网站上新内容的通知。我有4张桌子 -

  • 制品
  • 媒体
  • 更新
  • 评论

每个表都有一组自己的列(如果有人想要,我可以包含这些列)。在我正在设计的新通知系统中,我通过其时间戳确定最新内容。时间戳值是格式为Unix Time的整数。

我刚刚更改了我的表结构,之前,我的表都有相似的列。例如,文章和媒体都有 id 列。我使用的SQL代码就是这个 -

SELECT a.*,m.*,u.*,c.* from articles AS a
LEFT JOIN media AS m ON (m.mediaTimestamp = a.timestamp)
LEFT JOIN updates AS u ON (u.updateTimestamp = a.timestamp)
LEFT JOIN comments AS c ON (c.commentTimestamp = a.timestamp)
ORDER BY a.timestamp desc LIMIT 30

但是,执行此操作时,代码将返回同一行中列的多次迭代(它将返回文章和媒体的 id 列!)。显然,当我试图通过代码获取数据时,它会为我提供不同表格的数据(而不是给我文章ID,它会给我媒体ID)。

我对此的解决方案是'非常'我的代码,并用表的前缀命名表中的所有列(例如文章)(因此id将成为articleID)。但是现在上面的SQL会产生错误。有人可以'转换'/重构这个SQL给我。

1 个答案:

答案 0 :(得分:2)

试试这个:

SELECT a.*,m.*,u.*,c.* from articles AS a
LEFT JOIN media AS m ON (m.mediaTimestamp = a.articleTimestamp)
LEFT JOIN updates AS u ON (u.updateTimestamp = m.mediaTimestamp)
LEFT JOIN comments AS c ON (c.commentTimestamp = u.updateTimestamp)
ORDER BY a.articleTimestamp desc LIMIT 30