我想选择一个有两个联接的记录。我有以下查询:
$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();
它工作正常,但是如果我在数据库中有更多照片,则会得到更多记录,这取决于照片记录。无论照片表中的号码记录如何,我该如何为每辆车获得一份记录?
编辑: LIMIT
并DISTINCT
没有工作。
您可以使用GROUP_CONCAT
和SUBSTRING_INDEX
挑选一张照片,如果您希望所有照片都可以使用,GROUP_CONCAT(photos.name) AS photo
并且可以用逗号分隔列表获取所有照片名称,我已经使用过,->group_by('vehicle.idvehicle');
因此对于一个车组,所有照片都将用逗号合并,但是在您的问题中,您说您需要一张照片,所以我用过SUBSTRING_INDEX
,GROUP_CONCAT
如果照片的ID是自动递增的,那么您还可以通过使用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个字符,但是可以按照手册进行操作来增加此限制。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句