2014-04-22 144 views
0

我有3个表格,表示类似电子邮件的附件。因此,电子邮件具有零个,一个或多个附件。子查询或INNER JOIN?

这三个表EmailsAttachmentsFiles

Emails - 每一行指的是一个电子邮件,包含邮件ID

Attachments - 每行包含一个邮件ID和写到FileID。可以有多个具有相同消息ID的行。

Files - 每一行指的是一个文件,包含一个写到FileID和文件大小(尺寸)

我试图让MySQL中的结果,其中包含EMAILID的列表和所有文件的总大小和没有成功。我可以使用SUM(Size)INNER JOIN获得文件大小的总和,但我无法获得EmailID和文件总大小的列表。

这个应该使用多个INNER JOIN吗? INNER JOIN和子查询?然后一个GROUP BY?子查询,然后是IN。即使在这里的方向将是非常有帮助的。

使用PHP进行迭代似乎非常昂贵。

非常感谢!

回答

1
SELECT 
    e.msgID, 
    SUM(f.size) 
FROM emails e 
INNER JOIN attachments a 
    ON a.msgID = e.msgID 
INNER JOIN files f 
    ON f.fID = a.fID 
GROUP BY e.msgID 

我认为应该这样做。

+0

现在很漂亮。而且快。谢谢!! (我不能说我获得GROUP BY如何为我申请点击的顺序,但它有效,我会盯着它很长一段时间。) –