我想选择一个带有两个连接的记录。 我有以下查询:
$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中有更多照片,我会获得更多记录,这取决于照片记录。 无论照片表中的数字记录如何,我应该怎样接收每辆车的一条记录?
修改: LIMIT
和DISTINCT
无效。
答案 0 :(得分:3)
您可以使用GROUP_CONCAT
和SUBSTRING_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}}