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';