来自4个表的MySQL JOIN SELECT(phpBB数据库)

时间:2018-05-23 07:53:47

标签: mysql

我想从4个 phpBB数据库表中提取数据。 表格是帖子,主题,论坛,附件 (比方说5)帖子,以及相关的第一个主题附件(如果有的话)。 如果我尝试这个查询:

SELECT * FROM posts 
JOIN topics ON topics.topic_id = posts.topic_id 
AND topics.topic_visibility = 1
AND topics.topic_last_post_id = posts.post_id
JOIN forums ON forums.parent_id = 1
AND topics.forum_id = forums.forum_id
ORDER BY posts.post_time DESC LIMIT 0,5

以正确的顺序正确返回所有帖子和相关主题,以及属于指定论坛cat的论坛。 但是如何,不执行另一个单独的查询,可以提取相同的结果,从第四个表附件添加数据,返回所有附件(或仅第一个)在任何情况下,如果这些主题的附件表中是否存在附件记录,那么每个主题都是什么?

wiki.phpbb.com/Tables

1 个答案:

答案 0 :(得分:0)

这部分地解决了我的问题,或完全,我现在不确定因为我在飞行而且有点困惑......(另一次)我将此标记为已解决但我想知道这是否无论什么时候有人想帮助我理解这个烂摊子,都是最快速可靠的方式。

SELECT * FROM  posts
    JOIN topics ON topics.topic_id = posts.topic_id 
     AND topics.topic_visibility = 1
     AND topics.topic_last_post_id = posts.post_id
    JOIN forums ON forums.parent_id = 1
     AND topics.forum_id = forums.forum_id
  JOIN attachments
   WHERE attachments.attach_id = (SELECT MIN(attach_id) FROM attachments WHERE attachments.topic_id = topics.topic_id)
   ORDER BY posts.post_time DESC LIMIT 0,5
部分地,因为如果主题没有附件,那么结果不包含主题:这是可以接受的,因为我有另一个要检查的数组,所以很容易提取和连接两个foreach的值。此外,属于指定猫的主题,默认情况下需要附加,因此它适用于这种情况。但这不是我问题的完整答案。 我真的想知道我必须采取什么其他方式来解决,也许更快,并完成质疑。我可能会再次回来,此刻干杯给所有很酷的人。