2010-03-24 106 views
0

对于下面的连接查询,我想从第三个MySQL表中获取一些名为“comment”的数据。每个s.title都有一个对应的s.submissionid。 “submitid”字段也在表格“评论”中。加入三张表

对于表格“comment”中的每个“submissionid”,我想要计算一个名为“commentid”的字段。

我该怎么做?

由于提前,

约翰

$sqlStr = "SELECT s.loginid, s.title, s.url, s.displayurl, l.username 
      FROM submission AS s, 
        login AS l 
      WHERE s.loginid = l.loginid 
     ORDER BY s.datesubmitted DESC 
      LIMIT 10"; 
+0

是不是正是你在这里问同样的问题:http://stackoverflow.com/questions/2496066/using-a-join-with-three-tables-when-a-field-might-be -空值 ? – VolkerK 2010-03-24 00:41:47

+0

我很难得到这个工作。 – John 2010-03-24 00:50:41

回答

2

是的,你可以这样做,但你要的问题是,如果登录有多个意见,并提交有多个评论,您的结果可能很难解释。

换一种方式,如果你有10个登录,每个人都有5份意见书,并每次提交有8条评论你要拉回来10×5×8 = 400行。现在你可以处理,但数据可能失控。

话虽:

SELECT s.loginid, s.title, s.url, s.displayurl, l.username, c.commentid 
FROM submission s 
JOIN login l ON s.loginid = l.loginid 
LEFT JOIN comments c ON s.submissionid = c.submissionid 
ORDER BY s.datesubmissed DESC 
LIMIT 10 

注:我已经改变了上述使用ANSI SQL连接语法。你应该赞成这一点。通常阅读起来要容易得多。

+0

谢谢......如果没有等于c.submissionid的s.submissionid,这项工作是否会完成? – John 2010-03-24 00:45:57

+0

@约翰不,你需要一个外连接。让我修改。 – cletus 2010-03-24 00:58:05