虽然Loop回声只有1次值

时间:2016-04-20 01:38:50

标签: php

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

  

forum_categories
  CAT_ID

     

论坛
  CAT_ID

我试图计算每个类别的总数,因为它显示所有记录的总记录。

  

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

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

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

显示

  

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

何时显示

  

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

     

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

2 个答案:

答案 0 :(得分:3)

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

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

*如果cat2为2,cat2为1,你在每个表行中回显:

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

因此,您会看到两行的总数(3)。

您实际尝试的是加入 forumsforum_categories表,获取forum_categories.cat_titleCOUNT(forums.cat_id),同时将结果分组为{ {1}}

forums.cat_id

以下是我昨天发给你的同一个演示fiddle

您的查询会返回类似于:

的内容
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

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

答案 1 :(得分:2)

试试这个

替换此

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

用这个

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