2010-08-09 67 views
1
+--------------+--------------+------+-----+-------------------+---------------- 
+ 
| Field  | Type   | Null | Key | Default   | Extra 
| 
+--------------+--------------+------+-----+-------------------+---------------- 
+ 
| mag_id  | int(11)  | NO | PRI | NULL    | auto_increment 
| 
| cat_id  | int(11)  | NO |  | NULL    | 
| 
| mag_cat_id | int(11)  | NO |  | NULL    | 
| 
| name   | varchar(512) | NO |  | NULL    | 
| 
| publish_type | varchar(256) | NO |  | NULL    | 
| 
| chief  | varchar(256) | NO |  | NULL    | 
| 
| tel   | varchar(256) | NO |  | NULL    | 
| 
| fax   | varchar(256) | NO |  | NULL    | 
| 
| website  | varchar(256) | NO |  | NULL    | 
| 
| email  | varchar(256) | NO |  | NULL    | 
| 
| issue_number | varchar(256) | NO |  | NULL    | 
| 
| keyword  | varchar(512) | NO |  | NULL    | 
| 
| index  | tinyint(1) | NO |  | 0     | 
| 
| view_num  | int(11)  | NO |  | 0     | 
| 
| download  | int(11)  | NO |  | 0     | 
| 
| act_date  | timestamp | NO |  | CURRENT_TIMESTAMP | 
| 
+--------------+--------------+------+-----+-------------------+---------------- 

和类别表SQL子查询问题

+----------+--------------+------+-----+-------------------+----------------+ 
| Field | Type   | Null | Key | Default   | Extra   | 
+----------+--------------+------+-----+-------------------+----------------+ 
| cat_id | int(11)  | NO | PRI | NULL    | auto_increment | 
| name  | varchar(256) | NO |  | NULL    |    | 
| act_date | timestamp | NO |  | CURRENT_TIMESTAMP |    | 
+----------+--------------+------+-----+-------------------+----------------+ 

我想创建类的菜单如下: 电影(2) 政治(19)

数来自数杂志内的类别,但我不知道如何查询数据库来创建此。我循环通过类别表,并在该循环内发送每个类别ID到杂志表和从杂志表中取数字,但我认为这不是正确的方法来做到这一点。这是我的代码。

<?php 
$category = $this->db->get('category')->result(); 
foreach($category as $c):?> 
<li> 
<?=anchor('main/get/'.$c->cat_id ,'<img src="'.base_url().'images/bullet.gif" border="0"/>&nbsp;&nbsp;'.$c->name .' ('.$this->category_model->get_mag_in_category($c->cat_id) .')');?> 
<!-- Show magazine in each category --> 
</li> 
<?php endforeach;?> 

我想我需要做这个与子查询。

回答

2

这将返回类别,即使他们没有关联杂志:

select c.name, count(*) as Count 
from category c 
left outer join magazine m on c.cat_id = m.cat_id 
group by c.name 

如果你只想与杂志类别,这样做:

select c.name, count(*) as Count 
from category c 
inner join magazine m on c.cat_id = m.cat_id 
group by c.name 
+0

完美!坦克。 – mehdi 2010-08-09 15:52:40