【问题标题】:Count number of returned rows for menu items计算菜单项的返回行数
【发布时间】:2011-02-13 10:34:34
【问题描述】:

我有 2 张桌子: 分类,Oglasi

categories
category_id | category | parent
1             auto      0
2             games     0
3             bmw       1
4             cards     2

oglasi
oglas_id | category_id
1          3            
2          4             

我想要做的是将这个菜单设为:

父名称 - 类别名称(该类别中的项目数)

示例:汽车 - bmw (1)

现在我得到它来制作父名称类别名称的树形菜单,但不知道如何将所有这些与计数的行数联系起来。这是我的查询和代码:

$kategorije = dbQuerySelect('SELECT a.category parent
                                  , b.category child
                                  FROM categories a
                                  JOIN categories b
                                  ON a.category_id = b.parent
                                  ORDER BY a.category_id');
                if ($kategorije)
                  {
                    $parent = '';
                    echo "<ul>";
                    foreach ($kategorije as $next) {
                       if ($next['parent'] != $parent) {
                          if (strlen($parent) > 0) {
                             echo "    </ul>";
                             echo "  </li>";
                          }
                          echo "  <li>" . $next['parent'];
                          echo "    <ul>";
                       }
                       echo "    <li>" . $next['child'] . "</li>";

                       $parent = $next['parent'];
                    }
                    echo "    </ul>";
                    echo "  </li>";
                    echo "</ul>";
                  }

所以在这种情况下返回:

parent | child
auto     bmw
games    cards

有人可以帮我编辑我的代码并返回每个“子类别”中的行数吗?我在查询中尝试了 COUNT 的一些变体,但我就是无法让它工作。

【问题讨论】:

    标签: php mysql


    【解决方案1】:
    SELECT a.category parent, 
           b.category child,
           (select count(*) from oglasi where category_id = b.category_id) as count
    FROM categories a
    JOIN categories b
    ON a.category_id = b.parent
    ORDER BY a.category_id
    

    有了这个你应该得到:

       parent|child|count
       auto  bmw    1
    

    【讨论】:

    • 天哪,谢谢。我尝试了每种形式的计数,但不像嵌套选择。非常感谢!
    • 无论如何,有没有更好(更快)的方法来获取孩子的数量?我有大约 220 个子类别,这样查询太慢了..
    • 您在 oglasi.category_id 列上有索引吗?
    • 不,我在标题字段上有索引。如果我也索引 category_id 是否应该加快速度?
    • 对不起,其实我有一个索引。我在本地主机上看我的桌子,在现场我放了一个索引,忘了它:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    相关资源
    最近更新 更多