2013-02-15 47 views
0

在SO上发现了类似的问题,但没有任何帮助。这是我的问题:MySQL查询从多个表中检索数据作为嵌套树

我有一个表,'事件',这将是相当大的。 也有这两个表:'照片'和'视频'。 每个'events'记录都有一个eid(event 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(除非它被强烈建议);我正在与一个足够大的代码库合作,只有一个开发人员(我)才会头痛。

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

+0

下面有没有帮助我的答案吗? – 2013-02-15 22:45:15

回答

0

尝试像..

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

这是返回0结果。我认为这是因为它假定每个事件至少有一个视频和照片。那是为什么?另外,我不明白这是如何将事件的照片和视频嵌入到事件输出中的。 (我想后者可以用php来完成) – celwell 2013-02-15 23:43:17

+0

这只是一个简单的例子,你可以使用它来代替连接。您应该发布您当前的SQL查询,以便我可以进一步帮助您。 – 2013-02-15 23:48:55

+0

谢谢,但目前的查询是在ActiveRecord语句中,因为我使用的是CodeIgniter。我必须发布整个PHP文件,让他们有任何意义(我不能这样做)。有没有办法通过结果和子查询中的所有事件行将照片添加到“照片”别名/列和视频相同? – celwell 2013-02-16 00:00:57