2011-12-08 25 views
1

我有兩張表manufacturercolorsSQL + CI:如何連接多行?

在表manufacturer

id  title 
5  Audi 
8  Toyota 
11  Peugeot 

在色表我有多種顏色供製造商

id  car_id  color 
1  5   red 
2  5   blue 
3  8   cyan 
4  5   purple 
5  8   dark_cyan 
6  11   white 
7  11   black 

問題是,我怎麼能獲取從數據庫結果顯示所有顏色中的所有汽車?

我施蒂希這樣的事情..

$this->db->select('m.*, c.*'); 
$this->db->join('colors c', 'c.car_id = m.id', 'left'); 
$this->db->group_by('m.title'); 
$this->db->order_by('c.color', 'DESC'); 

return $this->db->get('manufacturer'); 

查看

<?php foreach($all_colors->result() AS $color) : ?> 

    <h4><?php echo $color->title; ?></h4> 

    <?php echo $color->color; ?> 

<?php endforeach; ?> 

所以,這將是這個樣子

- Audi 
red 
blue 
purple 

- Toyota 
cyan 
dark_cyan 

- Peugeot 
white 
black 

這是我的例子中,只顯示標題和第一那輛車的顏色......?

- Audi 
red 

- Toyota 
cyan 

- Peugeot 
white 

感謝您的幫助!

回答

0

我沒有看到你提取數據的方式有什麼問題。唯一的問題可能是在這些方法中使用別名。嘗試使用原始查詢是這樣的:

$q = $this->db->query("SELECT * FROM manufacturer m left join colors c on c.car_id = m.id GROUP BY m.title ORDER BY c.color DESC"); 
return $q->result(); 

然後:

<?php foreach($all_colors->result() AS $color) : ?> 
<h4><?php echo $color->title; ?></h4> 
<?php echo $color->color; ?> 
<?php endforeach; ?> 

或嘗試沒有別名來獲取數據:

$this->db->select('*'); 
$this->db->join('colors', 'colors.car_id = manufacturer.id', 'left'); 
$this->db->group_by('manufacturer.title'); 
$this->db->order_by('colors.color', 'DESC'); 
return $this->db->get('manufacturer');