php - While 循环仅回显 1 个值两次

标签 php

我在数据库中有 2 个名为 forums 和 forum_categories 的表

forum_categories
cat_id

forums
cat_id

我正在尝试计算每个类别的总数,由于某种原因它显示所有记录的总记录。

I have 2 categories so far in the database

第一个类别的值为 1
第二个类别的值为 2

在第一类中,我有两个 cat_id 为 1 的论坛
在第二类中,我有一个论坛的 cat_id 为 2

显示

category 1 -------------------- 3 ---------------
category 2 -------------------- 3 ---------------

何时显示

category 1 -------------------- 2 ---------------
category 2 -------------------- 1 ---------------

$topics_count always displays 3.

   $sql = "SELECT * FROM forum_categories, forums WHERE forum_categories.cat_id = forums.cat_id GROUP BY forum_categories.cat_id";
$result = query($sql);



$sql2 = "SELECT fc.cat_title COUNT(f.forum_id) FROM forums as f LEFT JOIN forum_categories fc ON (f.cat_id = fc.cat_id) GROUP BY f.cat_id";
$result2 = query($sql2);
$topics_count = count($result2);



while (($row = mysqli_fetch_assoc($result)) != false) {

    $cat_id = $row['cat_id'];
    $cat_title = $row['cat_title'];
    $forum_name = $row['forum_name']; 


    echo "<tr>";

    echo "<td>$cat_id</td>";
    echo "<td><a href='viewforum.php?f={$cat_id}'>$cat_title</a><br>$forum_name admin</td>";
    echo "<td>$topics_count</td>";
    echo "<td>0</td>";
    echo "</tr>";
}

最佳答案

下面的这段代码为您提供了所有结果:

$sql2 = "SELECT * FROM forums WHERE cat_id = cat_id";
$result2 = query($sql2);
$topics_count = row_count($result2); // here this would be 3*

*如果 cat1 为 2 + cat2 为 1,并且您在每个表行中回显如下:

echo "<td>$topics_count</td>";

因此您会在两行中看到总数 (3)。

您实际尝试的是加入 forumsforum_categories 表,获取 forum_categories.cat_titleCOUNT(forums.cat_id),同时按 forums.cat_id

对结果进行分组
SELECT
    fc.cat_title,
    COUNT(f.forum_id)
FROM forums as f
LEFT JOIN forum_categories fc ON (f.cat_id = fc.cat_id)
GROUP BY f.cat_id

这是相同的演示 fiddle我昨天已经发给你了。

您的查询将返回类似以下内容:

Demo Forum 1 | 2
Demo Forum 2 | 1

更新:

$sql2 = "SELECT
            fc.cat_id,
            fc.cat_title,
            f.forum_name,
            COUNT(f.forum_id) as count
        FROM forums as f
        LEFT JOIN forum_categories fc ON (f.cat_id = fc.cat_id)
        GROUP BY f.cat_id";

$result2 = query($sql2);

while (($row = mysqli_fetch_assoc($result)) != false) {

    $cat_id = $row['cat_id']; // category id
    $cat_title = $row['cat_title']; // category title
    $forum_name = $row['forum_name']; // forum name
    $count = $row['count']; // count of forum_id (grouped by cat_id)

    echo "<tr>";
    echo "<td>$cat_id</td>";
    echo "<td><a href='viewforum.php?f={$cat_id}'>$cat_title</a><br>$forum_name admin</td>";
    echo "<td>$count</td>";
    echo "<td>0</td>";
    echo "</tr>";

}

在这里,我很确定计数没问题,但不确定“论坛名称”。

关于php - While 循环仅回显 1 个值两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36732368/

相关文章:

php - 当我没有主机的 'create' 权限时,如何在 mysql 数据库中创建表?

php - 正则表达式条件

php - 创建 301 重定向多个 url 地址同一服务器?

没有额外行的 PHP 引用数组项

mysql - php-fpm 无法连接到 mysql

c# - 使用 PHP SOAP 服务返回一个数组

php - 结合 css 和 js 文件 + css 图片

成功时 PHP 页面重定向,否则显示错误

php - 是否可以让 PHP 脚本使用 Linux 用户信息对用户进行身份验证?

php - 显示数据库中的 1 张以上图像? (PHP、MySQL)