2011-05-08 128 views
1

我使用两个表来保存有关汽车的信息。在第一个表格中有关于汽车制造商等的信息,第二个表格包含每辆车的图像。我的表是这样的:不同的mysql结果 - codeigniter

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 

我想在单行的所有信息。 我知道我可以给你两个疑问,但我想知道如何处理单个问题?

+0

是否有这个要求的原因? – DarkSquirrel42 2011-05-08 12:39:17

回答

2

添加以下行的数组:$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可以用作MySQL中的distinct的同义词。

1

您加入2张表格,您将从car_information获得相同的结果,如果有多张图片的话!你必须这样做2查询或只是使用第一个结果数组提取汽车信息,然后循环它,并只使用图像数据。

1

我想这里是你要找的答案。 http://codeigniter.com/forums/viewthread/100523/ 又看了这里的笨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