【问题标题】:SQL + CI: How to join multiple rows?SQL + CI:如何连接多行?
【发布时间】:2011-12-08 20:38:19
【问题描述】:

我有两张桌子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

感谢大家的帮助!

【问题讨论】:

    标签: php mysql codeigniter join


    【解决方案1】:

    我认为您获取数据的方式没有任何问题。唯一的问题可能是在这些方法中使用别名。尝试使用这样的原始查询:

    $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');
    

    【讨论】:

    • 老兄,这些年来我一直对你如此不尊重,并且没有检查你的答案是否正确!很抱歉..
    猜你喜欢
    • 1970-01-01
    • 2013-11-04
    • 2011-05-06
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多