在this问题中,我询问了如何显示位于特定类别中的工厂数量(使用计数)。
我只想做这样的事情:
Sidebar
------
Category1 (3)
Category2 (7)
Category3 (2)其中,()之间的数字是位于特定类别中的工厂。
我使用一个连接表来获取factoryid和categoryid。我称这个表为factorycategories。通过这种方式,我可以为我的工厂指定多个类别。
那么,如何计算具有类别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){发布于 2013-04-22 23:24:45
在您的模型中,您需要调整查询。我不确定您的表结构到底是什么样子的,所以我使用自己的示例:
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 ;EDIT:使用已发布的表,您的查询将更改为以下内容:
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-22 19:51:49
你只是在找像这样的东西
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您只需使用left join或sample join获取类别名称,即可从category表中打印类别名称
输出
total idcategories
3 1
1 2
1 3https://stackoverflow.com/questions/16146345
复制相似问题