下面的代码工作得很好。它结合了来自两个MySQL表的数据。我想通过从第三个名为comment
的MySQL表中提取一些数据来修改它。
在下面的HTML表中,title
是MySQL表中的一个字段。每个submission
都有相应的title
字段。字段submissionid
也可以在MySQL表中找到。
在下面的HTML表中,我希望submissionid
等于任何给定comment
的MySQL表中出现名为countComments
的字段的次数,其中commentid
在comment
和submissionid
表中都是相同的,submissionid
对应于使用的submission
。
这里有一个问题:如果MySQL表中没有对应于用于comment
的submissionid
的行,我希望title
等于零。
我该怎么做?
$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";
$result = mysql_query($sqlStr);
$arr = array();
echo "<table class=\"samplesrec\">";
while ($row = mysql_fetch_array($result)) {
echo '<tr>';
echo '<td class="sitename1"><a href="http://www.'.$row["url"].'">'.$row["title"].'</a></td>';
echo '</tr>';
echo '<tr>';
echo '<td class="sitename2"><a href="http://www...com/sandbox/members/index.php?profile='.$row["username"].'">'.$row["username"].'</a><a href="http://www...com/sandbox/comments/index.php?submission='.$row["title"].'">'.$row["countComments"].'</a></td>';
echo '</tr>';
}
echo "</table>";
最佳答案
您正在进行内部联接,但您需要外部联接,特别是左联接。使用左联接时,表“on the LEFT”始终联接,如果没有对应关系,则右侧表的字段设置为空。这个wikipedia page很好地解释了这种差异。
然后,您必须使用相同的提交id对行进行分组,并计算分组的行数,注意如果一个提交只有一个注释,而另一个没有注释,则它们都有一个分组行。。。如果一个提交没有注释,那么在下一个查询中c.submissionid
将为空,因此
你的SQL可能是
SELECT s.loginid, s.title, s.url, s.displayurl, l.username, c.submissionid,
IF(c.submissionid IS NULL, 0, COUNT(*)) AS countComments
FROM submission AS s
INNER JOIN login AS l ON l.loginid = s.loginid
LEFT JOIN comments AS c ON c.submissionid = s.id
GROUP BY (s.id)
ORDER BY s.datesubmitted DESC
LIMIT 10
可能有错误,我没有测试查询。。。但我希望给你一个正确的想法,那就是外部连接和内部连接的区别。