以下代码效果很好。它结合了两个MySQL表的数据。我想通过从名为comment
的第三个MySQL表中提取一些数据来修改它。
在下面的HTML表格中,title
是MySQL表submission
中的一个字段。每个title
都有一个相应的submissionid
字段。字段submissionid
也可以在comment
MySQL表中找到。
在下面的HTML表格中,我希望countComments
等于任何给定commentid
的MySQL表comment
中出现submissionid
字段的次数, submissionid
和submission
表中comment
相同的位置,以及submissionid
对应于所使用的title
的位置。
以下是问题:如果MySQL表comment
中没有与submissionid
table
对应的行,我希望countComments
等于零。
我该怎么做?
$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>";
答案 0 :(得分:1)
你正在进行INNER JOIN,但是你需要一个OUTER JOIN,特别是LEFT JOIN。使用LEFT JOIN,“左侧”表始终连接,如果没有对应,则右侧表的字段设置为null。这个差异在wikipedia page中得到了很好的解释。
然后,您必须对具有相同提交ID的行进行分组并计算已分组的行数,请注意,如果一个提交只有一个注释而另一个没有,则它们都有1个分组行...如果一个提交没有评论,在下一个查询中c.submissionid
将为null,所以
你的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
可能有错误,我还没有测试过查询...但我希望能给你正确的想法,那就是外连接和内连接之间的区别。
答案 1 :(得分:0)
如果我理解你的问题,那该怎么办:
SELECT s.loginid, s.title, s.url, s.displayurl, l.username, COUNT(c.id) AS commentCount
FROM submission AS s
LEFT JOIN login AS l ON l.loginid = s.loginid
LEFT JOIN comments AS c ON c.submissionid = s.id
ORDER BY s.datesubmitted DESC
LIMIT 10
答案 2 :(得分:0)
试
SELECT s.loginid, s.title, s.url, s.displayurl, l.username, c.submissionid,
COUNT(c.submissionid) 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.loginid, s.title, s.url, s.displayurl, l.username, c.submissionid
ORDER BY s.datesubmitted DESC
LIMIT 10
或
SELECT s.loginid, s.title, s.url, s.displayurl, l.username, c.submissionid,
(SELECT count(*) FROM submission s WHERE c.submissionid =s.submissionid) AS countComments
FROM submission AS s
INNER JOIN login AS l ON l.loginid = s.loginid
ORDER BY s.datesubmitted DESC
LIMIT 10
如果我没有制作(m)任何拼写错误:)
如果它适合你,我可以提供更多解释。