2013-04-22 44 views
0

this问题的工厂数量,我问了一下如何展示其位于一个特定的类别(使用次数)的工厂的数量。获得可以在一个类别

我只想做这样的事情:

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

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

我使用一个连接表,以获得factoryid和类别ID。我把这个表叫做factorycategories。这样,我可以为我的工厂指定多个类别。

那么我如何计算这些工厂的类别ID?

我可以当我使用的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){ 

回答

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 
+0

发布了我的表格结构,如果可以的话,请编辑你的问题 – 2013-04-22 17:20:46

+0

会试试这个! hanks – 2013-04-24 07:42:32

+0

hm我添加了代码,但我无法得到结果。我必须在我的控制器和视图中放置什么? @Kobus – 2013-04-24 07:51:06

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 
+0

这是行不通的,因为我不知道如何实现这一点。也看看我的问题中的另一个问题。有更好的解释表格和功能。 – 2013-04-22 12:01:03

+0

请检查我的更新后的查询,如果你有像上一个问题那样的表格 – liyakat 2013-04-22 12:23:56

+0

那么现在我可以在控制器中添加一个函数,然后在视图中查看,以便工厂显示为我的类别后面的数字? – 2013-04-22 12:28:08

相关问题