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

Php 如何构造此SQL查询。合并多个表?,php,sql,Php,Sql,注意:这不是的副本。我已更改了表结构,需要有关新查询的新帮助 所以基本上我会在我的网站上收到新内容的通知。我有四张桌子- 文章 媒体 更新 评论 每个表都有一组自己的列(如果有人愿意,我可以包括这些列)。在我正在设计的新通知系统中,我通过时间戳确定最新的内容。时间戳值是格式化为的整数 我刚刚改变了我的表结构,以前,我的表都有相似的列。例如,文章和媒体都有列id。我使用的SQL代码如下- SELECT a.*,m.*,u.*,c.* from articles AS a LEFT JOIN m

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

所以基本上我会在我的网站上收到新内容的通知。我有四张桌子-

  • 文章
  • 媒体
  • 更新
  • 评论
每个表都有一组自己的列(如果有人愿意,我可以包括这些列)。在我正在设计的新通知系统中,我通过时间戳确定最新的内容。时间戳值是格式化为的整数

我刚刚改变了我的表结构,以前,我的表都有相似的列。例如,文章和媒体都有列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)

我的解决方案是对我的代码进行“修饰”,并用表前缀命名表中的所有列(如articles)(因此id将成为articleID)。但是,现在上面的SQL正在产生错误。有人能为我“转换”或重组这个SQL吗

试试这个:

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

第81行的/home/cryptum1/public_html/weblib/beta/api/content.php中的“on子句”中的未知列“a.timestamp”,请记住,没有任何列具有时间戳的名称,它们都以内容类型(articleTimestamp、mediaTimestamp等)作为前缀。这是可行的,另一个问题,如何获取该行最初来自哪个表?是否所有条件都应该包含与原始查询中的
a.articleTimestamp
的比较?但是,我应该如何做到这一点?我需要检查$row[articleTimestamp]!=null以确定它是否是一篇文章?目前,我在所有表中都有一个列名为contentType。我想你应该保留该列contentType,或者你可以与每个表相交并将其与null进行比较,我想没有简单的方法可以做到这一点。顺便问一下,你是否尝试更正你的查询,使a.timestamp变成a.articleTimstamp?是的,我以前做过,我刚刚意识到这与我原来的代码不同,我当时正在胡思乱想,想弄明白为什么它以前不起作用,然后就忘了。我现在明白了,谢谢。