0

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

我只想做这样的事情:

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)

编辑2

修复。我删除了

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

这是我的旧功能。

并添加

foreach($counts as $count){
4

2 回答 2

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
于 2013-04-22T11:51:49.150 回答
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

这是正确的结果,因为主页有两条内容,而其他 2 页各只有一项。

下面是我的表结构:

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
于 2013-04-22T15:24:45.230 回答