获得一个类别中的工厂数量

时间:2013-04-22 11:44:26

标签: php mysql codeigniter count categories

this问题中,我询问了如何显示位于特定类别的工厂数量(使用计数)。

我只想做这样的事情:

Sidebar
------
Category1 (3)
Category2 (7)
Category3 (2)

其中()之间的数字是位于特定类别的工厂。

我使用连接表来获取factoryid和categoryid。我打电话给这个工厂类别。通过这种方式,我可以为我的工厂指定多个类别。

那么如何计算类别为id的工厂?

当我在url中使用id时,我可以使用它,但在索引页面上,我的url中没有id,因此无效。

我的表结构:

factorycategories
-----------------
idfactorycategories
idfactories
idcategories

factories
---------
idfactories
factoryname
adress
postcode
country
etc etc..

categories
----------
idcategories
category

修改

我目前的代码:

工厂模型:

function bedrijf_categorie()
{

    $sql = "
    SELECT count(b.idbedrijven) as ItemCount, c.Categorie as Categorie
    FROM `bedrijven` b
    INNER JOIN `bedrijfcategorieen` bc
    ON bc.idbedrijven = b.idbedrijven
    INNER JOIN `categorieen` c
    ON c.idcategorieen = bc.idcategorieen
    GROUP BY c.idcategorieen
    ";
    $query = $this->db->query($sql);
    return $query->result();
}

    function index()
    {
    $data['counts'] = $this->bedrijven_model->bedrijf_categorie();
    }

在我的观点中:

print_r($counts)

EDIT2

修好了。我删了

foreach($query as $k->$value){

这是我以前的功能。

并添加了

foreach($counts as $count){

2 个答案:

答案 0 :(得分:0)

你只是在找这样的东西

   select count(Factorycategories.idfactorycategories) as total , Factorycategories.idcategories, Categories.Category from Factorycategories 

LEFT JOIN Categories
ON Factorycategories.idcategories=Categories.idcategories

group by Factorycategories.idcategories


idfactorycategories idcategories    idfactories
        1              1                1
        2                  1                2
        3              2                3
        4              3                4
        5              1                5

您只需要使用左连接或使用样本连接来获取类别名称,以从类别表

中打印类别名称

<强>输出

total   idcategories
3            1
1            2
1            3

答案 1 :(得分:0)

在您的模型中,您需要调整查询。我不确定你的表结构是什么样的,所以我使用我自己的例子:

SELECT count(c.id) as ItemCount, p.shortname as Page
FROM `icms3_content` c
INNER JOIN `icms3_page_content` pc
ON pc.content_id = c.id
INNER JOIN `icms3_page` p
ON p.id = pc.page_id
GROUP BY p.id

这给我的结果如下:

ItemCount | Page
===========================
        2 | home
        1 | typography
        1 | responsive

这是正确的结果,因为主页有两个内容,另外两个页面只有一个项目。

以下是我的表结构:

CREATE TABLE IF NOT EXISTS `icms3_content` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `teaser` varchar(255) NOT NULL,
  `content` longtext NOT NULL,
  `author` varchar(64) NOT NULL,
  `active` enum('Yes','No') NOT NULL,
  `publish_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `unpublish_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;

CREATE TABLE IF NOT EXISTS `icms3_page` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `shortname` varchar(64) NOT NULL,
  `image` varchar(255) NOT NULL,
  `title` varchar(64) NOT NULL,
  `keywords` varchar(255) NOT NULL,
  `description` varchar(320) NOT NULL,
  `author` varchar(128) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;

CREATE TABLE IF NOT EXISTS `icms3_page_content` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `page_id` int(11) NOT NULL,
  `content_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;

编辑:您的查询将使用您发布的表格更改为以下内容:

SELECT count(f.id) as ItemCount, c.category as Category
FROM `factories` f
INNER JOIN `factorycategories` fc
ON fc.idfactories = f.idfactories
INNER JOIN `categories` c
ON c.idcategories = fc.idcategories
GROUP BY c.idcategories