无论表中的数字记录如何,都为每列检索一条记录

时间:2014-03-29 15:54:11

标签: php mysql sql codeigniter

我想选择一个带有两个连接的记录。 我有以下查询:

$this->db
        ->select('vehicle.idvehicle, vehicle.mark, vehicle.model, vehicle.type, vehicle.author_id, users.nick, photos.name')
        ->from('xxxxxsld_auto.vehicle')
        ->join('users', 'vehicle.author_id = users.userid')
        ->join('photos', 'vehicle.idvehicle = photos.vehicle_id')
        ->get()
        ->result_array();

它运行正常,但如果我在DB中有更多照片,我会获得更多记录,这取决于照片记录。 无论照片表中的数字记录如何,我应该怎样接收每辆车的一条记录?

修改: LIMITDISTINCT无效。

1 个答案:

答案 0 :(得分:3)

您可以使用GROUP_CONCATSUBSTRING_INDEX选择一张照片,如果您想要使用GROUP_CONCAT(photos.name) AS photo所有照片,可以通过逗号分隔列表获取所有照片名称,我使用了->group_by('vehicle.idvehicle');因此,对于一个车辆组,所有照片都将以逗号合并,但在您的问题中,您说您需要一张照片,所以我使用SUBSTRING_INDEX您还可以获得最新的照片如果照片ID自动递增,请使用GROUP_CONCAT中的ORDER,如SUBSTRING_INDEX(GROUP_CONCAT(photos.name ORDER BY photo.id DESC),',',1) AS photo

$this->db
        ->select("vehicle.idvehicle, vehicle.mark,
         vehicle.model, vehicle.type, vehicle.author_id, users.nick, 
         SUBSTRING_INDEX(GROUP_CONCAT(photos.name),',',1) AS photo,",FALSE)
        ->from('xxxxxsld_auto.vehicle')
        ->join('users', 'vehicle.author_id = users.userid')
        ->join('photos', 'vehicle.idvehicle = photos.vehicle_id')
        ->group_by('vehicle.idvehicle'); 
        ->get()
        ->result_array();

或者只使用分组

$this->db
        ->select("vehicle.idvehicle, vehicle.mark,
         vehicle.model, vehicle.type, vehicle.author_id, users.nick, 
         photos.name,",FALSE)
        ->from('xxxxxsld_auto.vehicle')
        ->join('users', 'vehicle.author_id = users.userid')
        ->join('photos', 'vehicle.idvehicle = photos.vehicle_id')
        ->group_by('vehicle.idvehicle'); 
        ->get()
        ->result_array();

修改根据您所说的评论,您需要所有照片,因此请注意GROUP_CONCAT的默认限制为1024个字符要连接,但可以通过{ {3}}