COUNT()函数不返回行数

时间:2018-10-30 12:42:19

标签: php mysql count

我正在博客系统网站上工作。在这个博客系统中,我有两个表。一个称为blogs,它仅包含博客信息(例如 blog_title blog_author blog_category )。

另一个名为categories,其中仅包含博客帖子的 blog_category 名称。

现在,我已经建立了一个页面,用户可以在其中看到博客类别和该自定义类别名称中的博客文章数量

所以这是它的样子:

print screen

这是其背后的代码:

foreach($catShow as $cat){ 
echo "
    <tr>
        <td>".$cat['table_id']."</td>
        <td>".$cat['cat_title']."</td>
        <td>".$cat['cat_id']."</td>
        <td>".num_cats($cat['cat_id'])."</td>
        <td></td>
    </tr>";
}

因此,函数num_cats()基本计算blogs表中具有相同博客类别ID(cat_id)的博客文章数:

function num_cats($id){
        $num_cats = "SELECT COUNT(*) FROM blogs WHERE blog_category = '$id'";
        $run_num = mysqli_query($GLOBALS['con2'],$num_cats);
        $return = '';
        if (!$run_num) {
            die(mysqli_error($GLOBALS['con2']));
        }
        $numCat = mysqli_num_rows($run_num);
        $return .= " 
            $numCat
        ";
        return $return;
}

但是现在的问题是,结果不正确。我的意思是表格仅显示每个类别的 1 结果,但是其中一些在blogs表格中有多个项目。

那么这段代码有什么问题,请您帮我解决一下!

3 个答案:

答案 0 :(得分:3)

"SELECT COUNT() FROM blogs WHERE blog_category = '$id'"

将返回一行。因此$ numCat变为1。

您需要获取查询结果并从COUNT()获取值

function num_cats($id){
    $num_cats = "SELECT COUNT(*) AS count FROM blogs WHERE blog_category = '$id'";
    if ($result = mysqli_query($GLOBALS['con2'], $num_cats)) {
        $row = mysqli_fetch_assoc($result);
        return $row['count'];
    } else {
        die(mysqli_error($GLOBALS['con2']));
    }
}

答案 1 :(得分:0)

COUNT将给出数据库中的blog_category数。因此结果中只有一个带有类别计数的重新编码。

但是您再次致电mysqli_num_rows。因此,结果将始终为1。

只需删除mysqli_num_rows($run_num);并使用结果列名称更新查询,

SELECT COUNT(*) AS `total` FROM blogs WHERE blog_category = '$id'

然后致电

$row = mysqli_fetch_object($run_num);
$numCat = $row->total;

答案 2 :(得分:0)

使用连接以获得更好的性能

$sql = "Select table_id,cat_title,bc.cat_id,count(b.category_id) as total_post from blog b inner join blog_category bc on b.blog_category_id=bc.blog_category_id group by b.category_id";
$result = mysqli_query($GLOBALS['con2'],$sql);
while($cat = $result->mysqli_fetch_row()){
echo "
   <tr>
    <td>".$cat['table_id']."</td>
    <td>".$cat['cat_title']."</td>
    <td>".$cat['cat_id']."</td>
    <td>".$cat['total_post']."</td>
    <td></td>
 </tr>";
}