在类别视图中显示文档总计

时间:2013-12-31 13:08:23

标签: mysql count totals

Hello All Guru在那里。

这可能是最简单的事情,但我很难找到答案。

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

表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)

         

TOYOTA(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;
}

TPL将呈现PHP :(使用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}

非常感谢任何帮助!

先谢谢。

2 个答案:

答案 0 :(得分: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进行了一些更改,以显示没有元素的子类别

答案 1 :(得分:0)

我使用的查询是:

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

感谢你帮助Melon !!