Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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 使用GROUP BY的mysql查询无法获取所有行_Php_Mysql - Fatal编程技术网

Php 使用GROUP BY的mysql查询无法获取所有行

Php 使用GROUP BY的mysql查询无法获取所有行,php,mysql,Php,Mysql,我有两张桌子: 奖项: awardsid, forumid 论坛: forumid, title 当我进行查询以获取包含该论坛奖励计数的所有论坛时,该查询不会返回所有行。若数据库包含4行,则只返回3行。结果总是比预期少1行 $forumdata = $db->query_read(" SELECT COUNT(awards.forumid) AS awardscount,forum.title,awards.forumid FROM " . TABLE_PREFIX . " award

我有两张桌子:

奖项:

awardsid,
forumid
论坛:

forumid,
title
当我进行查询以获取包含该论坛奖励计数的所有论坛时,该查询不会返回所有行。若数据库包含4行,则只返回3行。结果总是比预期少1行

$forumdata = $db->query_read(" SELECT COUNT(awards.forumid) AS awardscount,forum.title,awards.forumid
FROM " . TABLE_PREFIX . " awards AS awards
 INNER JOIN " . TABLE_PREFIX . " forum AS forum ON (forum.forumid = awards.forumid)
 GROUP BY awards.forumid ");
       if($db->fetch_array($forumdata))
       {

                while ($awards = $db->fetch_array($forumdata))
                {
                $title .= $awards['title'];
                $awardscount .= $awards['awardscount'];
                echo $title.':'.$awardscount.'<br />';
                }
       }
       else
       {
        echo "No Data";
       }
更改您的:

 while ($awards = $db->fetch_array($forumdata))
                {
                $title .= $awards['title'];
                $awardscount .= $awards['awardscount'];
                echo $title.':'.$awardscount.'<br />';
                }


在开始处理之前,您要阅读它两次

获取if子句中的第一行,因此在中,您将从2到n回显行。我不知道您是如何实现访问mysql的类的,所以您可以使用如下内容:

echo isset($title) ? '' : 'No data';

在while循环之后,当然你应该以现在的方式去掉if/else子句。

做左连接而不是内连接你的if减去第一行。同样的问题,我已经试过了@AbhikChakrabortyah@Notulysses是对的,如果您可能需要使用get_num_rows来代替,那么您正在内部执行fetch_数组。如果您想添加echo NO data,那么您不需要在这里认真地添加echo NO data,那么您可以像这样编写空$yourvariable{echo NO data;}thnx,如果$db->fetch_array$forumdata to ifmysql_num_rows$forumdata>0,我会将其替换为if-else,并且工作良好。我想,按照您原来的if-else方法,在进行上述更改时,会给您带来轻微的性能优势。但是,只有在您非常频繁地触发此查询时才有关系。thnx,如果$db->fetch\u array$forumdata to ifmysql\u num\u rows$forumdata>0并且运行良好,我将替换它
echo isset($title) ? '' : 'No data';