Отличный результат mysql - codeigniter - PullRequest
1 голос
/ 08 мая 2011

Я использую две таблицы для хранения информации об автомобилях.В первой таблице содержится информация о производителе автомобилей и т.д., а во второй - изображения для каждого автомобиля.Мои таблицы выглядят так:

car_information    car_images
---------------    ---------
id       | 2       car_id 2 | img1
car_make | Fiat    car_id 2 | img2
color    | Blue    car_id 2 | img3
etc ....

Как видите, у каждого автомобиля есть три изображения.

Вот запрос, который я использую для получения результата;

 $this->db->select('
           c.id,
           c.car_make,
           c.car_color,
           ci.image
        ');       

  $this->db->from('car_information c');
  $this->db->join('car_images ci', 'ci.car_id = c.id', 'left');
  return $this->db->get();  

Все работает нормально, но проблемы, с которыми я сталкиваюсь, заключаются в дублировании результатов.

Например:

2 Fiat Blue img1
2 Fiat Blue img2
2 Fiat Blue img3

3 BMW white img4
3 BMW white img5

Что сделать, чтобы результат выглядел следующим образом

2 Fiat Blue img1 | img 2 | img 3

Я хочу получить всю информацию в один ряд.Я знаю, что я могу вам два запроса, но мне интересно, как сделать с одним?

Ответы [ 3 ]

2 голосов
/ 08 мая 2011

Добавьте следующую строку: $this->db->group_by('c.id');

вроде так:

 $this->db->select('
           c.id,
           c.car_make,
           c.car_color,
           ci.image
        ');       

  $this->db->from('car_information c');
  $this->db->join('car_images ci', 'ci.car_id = c.id', 'left');
  $this->db->group_by('c.id');
  return $this->db->get();  

Это будет работать в MySQL, потому что group by может использоваться как синоним для distinct в MySQL.

1 голос
/ 08 мая 2011

Я думаю, вот ответ, который вы ищете.http://codeigniter.com/forums/viewthread/100523/ Также прочитайте codeigniter user_guide здесь http://codeigniter.com/user_guide/database/active_record.html

Ваш запрос правильный, но SQL не работает так.Вы получаете необработанные данные, которые вы просили, насколько мне известно, форматирование должно выполняться на вашем языке программирования (в данном случае php).

$this->db->select('
         c.id,
         c.car_make,
         c.car_color,
         ci.image
     ');       

$this->db->from('car_information c');
$this->db->join('car_images ci', 'ci.car_id = c.id', 'left');
$query = $this->db->get();  

$i = 1;
foreach ($query->result() as $row) {
 $car_array[$row->car_id][$i++] = $row->image;
}
var_dump($car_array);

, который создаст массив, содержащий все изображения для car_id

1 голос
/ 08 мая 2011

Ваше объединение 2 таблиц, так что вы получите те же результаты от car_information, если есть несколько изображений! Вы должны сделать это как 2 запроса или просто использовать первый массив результатов для извлечения информации об автомобиле, затем зациклить его и просто использовать данные изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...