Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:计算项目并回显它们_Php_Mysql - Fatal编程技术网

PHP:计算项目并回显它们

PHP:计算项目并回显它们,php,mysql,Php,Mysql,我有三张桌子: 表1:主题表 topic_id name date 1 blue 3/20/14 2 green 3/21/14 3 red 3/22/14 表2:答复表 reply_id topic_id message 12 1 bla bla 13 1

我有三张桌子: 表1:主题表

topic_id       name      date
1              blue         3/20/14
2              green        3/21/14
3              red          3/22/14
表2:答复表

reply_id      topic_id      message 
12            1             bla bla
13            1             bla bla
14            2             bla bla
表3:评论表

comment_id    topic_id      message
50            1             bla bla
51            2             bla bla
如您所见,表2和表3通过名为topic_id的外键与表1相关

我使用以下查询选择并回显数据,如下所示:

$query ="SELECT name, COUNT(replies.topic_id) AS replies, COUNT(comments.topic_id) AS comments
         FROM topics
         LEFT JOIN replies
         ON topics.topic_id = replies.topic_id
         LEFT JOIN comments
         ON topics.topic_id = comments.topic_id";

$r = mysqli_query($dbc, $query);
if (mysqli_num_rows($r) > 0) {
   while ($num = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
      echo {$num['name']};
      echo {$num['replies']};
      echo {$num['comments']};
   }
}
如您所见,主题id编号1有两条回复和一条评论

但是,它输出两个答复和两条评论,如下所示:

name       replies     comments
blue        2            2
正确的结果应该是2条回复和1条评论

你能帮我吗

谢谢你可以试试

有帮助吗

select 
t.name, 
`replies`,
`comments`
from topics t
left join 
( 
    select topic_id,count(reply_id) as `replies`
    from replies
    group by topic_id
)r
on r.topic_id = t.topic_id
left join
(
    select topic_id,count(comment_id) as `comments`
    from comments
    group by topic_id
)c
on c.topic_id = t.topic_id
group by t.name

检查此处的演示

尝试左连接的内部连接安装。如果不起作用,请尝试COUNTDISTINCTcomments.comment\u idtry从phpmyadmin或其他sql工具运行此查询并删除计数。我想您会看到注释id返回了两次,总共2次。由于查询的方式不同,它被返回了两次written@Anthony:我无法使用内部联接,因为如果主题没有回复和1条注释,输出将不会返回注释。此外,我尝试了DISTINCT函数,它只返回一个回复和一条注释,因为它将回复表和注释表中的topic_id 2识别为重复的。因此,它只返回一个回复和一条注释,而不是应该返回的两条回复和一条注释。@mituv16:我无法移动计数函数,因为如果我这样做,它将返回主题id值,如1,2,3。它不再计算了。正如您可以在提供的链接中测试它一样,返回的注释数是2,但对于主题名BLUE,不是1。所以,这仍然是不正确的。这就是我想要你帮忙的地方!@阿比克:此外,如果主题没有回复,只有1或2条评论,评论的数量将不会因为内部连接而打印出来。因此,这里不能使用内部联接。请参阅我上面的评论。
select 
t.name, 
`replies`,
`comments`
from topics t
left join 
( 
    select topic_id,count(reply_id) as `replies`
    from replies
    group by topic_id
)r
on r.topic_id = t.topic_id
left join
(
    select topic_id,count(comment_id) as `comments`
    from comments
    group by topic_id
)c
on c.topic_id = t.topic_id
group by t.name