【问题标题】:MySQL query to retrieve data from multiple tables as nested treeMySQL 查询以嵌套树的形式从多个表中检索数据
【发布时间】:2013-01-31 21:43:47
【问题描述】:

在 SO 上发现了类似的问题,但没有任何帮助。这是我的问题:

我有一个表,“事件”,它会相当大。 还有这两个表:“照片”和“视频”。 每个“事件”记录都有一个 eid(事件 id)。 每个“照片”和“视频”记录都有一个 aeid(关联的事件 ID)。

要获取 20 个事件的事件数据,我目前正在运行 PHP,如下所示:

array = get top 20 events
for these 20 events
  array['photos'] = get all photos
  array['videos'] = get all videos
return events array

我发现这运行得太慢了。可能是因为这相当于 41 个 mysql 查询。我意识到我需要以某种方式使用 JOIN(我想我至少会这样做),但我无法弄清楚我们如何构建我的查询,以便它以与我在上面的伪代码中相同的方式嵌套照片和视频.另外,我认为我没有时间切换到 postgres(除非非常强烈建议);我正在使用足够大的代码库,以至于只有一个开发人员(我)感到头疼。

如果您发布文档/手册,我愿意阅读它们。但是,我已经在几个地方这样做了,但无济于事。谢谢!

【问题讨论】:

  • 我在下面的回答有帮助吗?

标签: php mysql database performance


【解决方案1】:

尝试类似..

 SELECT E.eid, V.aeid, P.aeid 
 FROM events E, videos V, photos P 
 WHERE E.eid='$ID' and V.aeid='$ID' and P.aeid='$ID' 
 ORDER BY E.eid desc

未经测试,但你应该明白这一点

【讨论】:

  • 返回 0 个结果。我认为这是因为它假设每个事件都至少有一个视频和照片。这是为什么?另外,我看不到这将如何将事件的照片和视频嵌套在事件输出中。 (我想后者可以用php完成)
  • 这只是一个简单的示例,您可以使用它来代替 join。您应该发布您当前的 sql 查询,以便我可以进一步帮助您。
  • 谢谢,但当前查询在 ActiveRecord 语句中,因为我使用的是 CodeIgniter。我必须为他们发布整个 php 文件才有意义(我不能这样做)。有没有办法遍历结果和子查询中的所有事件行,以将照片添加到“照片”别名/列,视频也一样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-18
相关资源
最近更新 更多