2011-12-08 5 views
1

私は2つのテーブルmanufacturercolorsを持っています。SQL + 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'); 
関連する問題