加入两张桌来计算

时间:2013-04-17 14:08:18

标签: php mysql sql join

我正在尝试使用以下有问题的SQL查询计算特定页面上的注释:

$query = "SELECT * FROM `comments` WHERE is_approved = '1' AND page_id = '943'"
$query = mysql_query($query);
$total = mysql_num_rows($query);
echo $total;

问题是输出0而不是2。

表格如下:

的网页:

id:1 page_id:943

id:2 page_id:978

id:3 page_id:977

注释:

id:2 page_id:1 "hello"

id:3 page_id:1 "great"

id:4 page_id:3 "super"

因此,原始查询应该从页面表格中设置的page_id获取每个评论的 true page_id,并加入comments.page_id = pages.id

最终的代码是什么样的,要么加入,要么得到那个数?谢谢。

4 个答案:

答案 0 :(得分:2)

"SELECT * FROM comments, pages WHERE comments.page_id = pages.id AND is_approved = '1' AND comments.page_id = '943'"

答案 1 :(得分:2)

尝试:

SELECT c.* FROM `comments` c
JOIN `pages` p on c.page_id = p.id
WHERE c.is_approved = '1' AND p.page_id = '943'

答案 2 :(得分:1)

尝试使用:

SELECT count(*) as cnt
FROM `comments` c join pages p on c.page_id =  p.id
WHERE c.is_approved = '1' AND p.page_id = '943'

在不同的表中,两个具有相同名称的列表示不同的东西,这似乎是一个非常糟糕的数据库设计。您应该将pages.page_id的名称更改为其他名称。

并且,这会直接返回计数,因此您可以从行中读取值。如果您只想要计数,则没有理由返回所有匹配的行。

答案 3 :(得分:0)

不需要加入:

$query = "SELECT * FROM `comments` WHERE is_approved = '1' AND WHERE page_id IN (SELECT id WHERE page_id = '943')"
$query = mysql_query($query);
$total = mysql_num_rows($query);
echo $total;
如果您不需要/使用数据,我建议使用count语句:

$query = "SELECT COUNT(*) as total FROM `comments` WHERE is_approved = '1' AND WHERE page_id IN (SELECT id WHERE page_id = '943')"
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
$total = $row['total'];
echo $total;