SQL + CI:如何连接多行?

时间:2011-12-08 20:38:19

标签: php mysql codeigniter join

我有两张表manufacturercolors

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

感谢您的帮助!

1 个答案:

答案 0 :(得分: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');