SQL + CI: как объединить несколько строк? - PullRequest
1 голос
/ 09 декабря 2011

У меня есть две таблицы manufacturer и colors.

В таблице 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');

View

<?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 голосов
/ 09 декабря 2011

Я не вижу ничего плохого в том, как вы выбираете данные. Единственной проблемой может быть использование псевдонимов в этих методах. Попробуйте использовать необработанный запрос так:

$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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...