而Loop回声只有1值两次


While Loop echos only 1 value twice

我在数据库中有两个名为论坛和论坛类别的表

forum_categories
cat_id

论坛
cat_id

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

到目前为止,我在数据库中有两个类别

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

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

它显示

类别1-------------3---------------
类别2---------------------------------------------

什么时候应该显示

类别1------------------------------------
类别2-----------------

$topics_count始终显示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

这是我昨天寄给你的同一把示范小提琴。

然后,您的查询会返回以下内容:

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>";
}

在这里,我很确定计数会是好的,但不确定"论坛名称"。

尝试这个

更换这个

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

用这个

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