我正在尝试使用以下有问题的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
最终的代码是什么样的,要么加入,要么得到那个数?谢谢。
答案 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;