1

我正在尝试使用以下有问题的 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_idpage_idcomments.page_id = pages.id

最终的代码会是什么样子来进行连接和/或获得该计数?谢谢你。

4

4 回答 4

2
"SELECT * FROM comments, pages WHERE comments.page_id = pages.id AND is_approved = '1' AND comments.page_id = '943'"
于 2013-04-17T14:11:30.483 回答
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'
于 2013-04-17T14:11:44.503 回答
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其他名称。

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

于 2013-04-17T14:13:04.797 回答
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;

当然,如果您不需要/使用数据,我会建议使用计数语句:

$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;
于 2013-04-17T14:20:59.497 回答