【问题标题】:Displaying Document Totals in Category View在类别视图中显示文档总计
【发布时间】:2013-12-31 13:08:23
【问题描述】:

大家好,各位大师。

这可能是最简单的事情,但我正在努力寻找答案。

基本上,我有两个表,结构如下:

表 1:

categories_docs
|    CATID    |    parent    |    name    |
| 1           | 0            | Cars       |
| 2           | 0            | Bikes      |
| 3           | 1            | VW         |
| 4           | 1            | Toyota     |
| 5           | 2            | Honda      |
| 6           | 2            | Yamaha     |

表2:

docs
|    DOCID    |  categories  |    title                         |
| 1           | 3            | GTI User Manual                  |
| 2           | 3            | Polo GTi Performance Tweaks      |
| 3           | 4            | Hilux 4x4 Cheat Guide            |
| 4           | 4            | Supra TuneUp                     |
| 5           | 5            | CBR600 Service Manual            |
| 6           | 5            | CBR1000RR Service Manual         |

基本上,他们应该输出:

汽车 (4)

大众 (2)

丰田 (2)

自行车 (2)

本田 (1)

雅马哈 (0)

目前我可以使用列表视图,但我很难让它计算总数。

查询列出类别:

function insert_get_categories($a)
{
global $config,$conn;
$query = "select * from categories_docs where parent='0' order by name asc"; 
$results = $conn->execute($query);
$returnthis = $results->getrows();
return $returnthis;
}

渲染 PHP 的 TPL:(使用 Smarty)

{insert name=get_categories assign=listcats}
    {section name=o loop=$listcats}
        <div class="column {if $smarty.section.o.iteration % 6 == 0}last{/if}"><br>
             <h3><a href="{$baseurl}/subcategory.php?id={$listcats[o].CATID}">  {$listcats[o].name|stripslashes}</a></h3>
        </div>
    {/section}

任何帮助将不胜感激!

提前致谢。

【问题讨论】:

  • 请注意,按照惯例,我们使用 NULL 而不是 0 来表示孤儿。

标签: mysql count


【解决方案1】:

我不是大师,但也许这对你有点帮助:

这个sql给出直接类别的总数:

select CATID,parent,name,count(*) from categories_docs inner join docs on categories=CATID group by CATID;

这个给你第一级父类别的总数:

select count(*),cd2.name from categories_docs cd1 inner join docs on categories=CATID join categories_docs cd2 on cd2.CATID=cd1.parent group by parent

如果你想一起展示它们,请使用 UNION ALL

select name,IF(isnull(DOCID) and parent !=0, 0, count(*)) as amount  from categories_docs left join docs on categories=CATID where parent!=0 group by CATID
UNION ALL
select cd2.name,IF(isnull(DOCID), 0, count(*)) from categories_docs cd1 inner join docs on categories=CATID join categories_docs cd2 on cd2.CATID=cd1.parent group by cd1.parent

编辑:我对最后一个 sql 进行了一些更改,以显示没有元素的子类别

【讨论】:

  • 嗨 Melon,唯一有效的查询是第一个查询,它完成了 99% 的我需要它做的事情。另外 1% 的事实是,如果里面没有文档,它不会列出类别。有没有办法让它列出“类别名称(0)”而不是完全删除类别?目前,我有大约 20 个类别,其中大约 12 个类别中有文档。它应该显示全部 20 个,而不仅仅是 12 个。非常感谢。
  • 也许他们不工作,因为我想念;在末尾。我使用您提供的行及其对我的工作来制作您的表格的副本。是的,有办法做到这一点,不止一个(我认为)我会尝试得到它。
  • 最后一个 sql 应该这样做。
  • 嗨 Melon,不幸的是最后两个查询根本不起作用。他们只是显示一个空白页:(
  • 如果我运行:“SELECT , COUNT() as total FROM categories_docs LEFT OUTER JOIN docs ON categories=CATID WHERE parent=0 GROUP BY CATID ORDER BY name asc” 代替什么都没有返回,我得到(1)(我假设它是空的)?我现在需要以某种方式让 (1) 成为 (0)
【解决方案2】:

我使用的查询是:

SELECT *,IFNULL(COUNT(D.CATEGORIES),0) as total FROM categories_docs AS CD LEFT JOIN docs AS D ON D.categories=CD.CATID WHERE CD.PARENT = 0 GROUP BY CD.CATID

谢谢你的帮助瓜!!

【讨论】:

  • 欢迎您。我认为你应该把这个编辑问题而不是回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
  • 2018-12-13
  • 1970-01-01
相关资源
最近更新 更多