我想选择一个有两个连接的记录。 我有以下查询:
$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
如果照片 ID 是自动的,你还可以通过在 GROUP_CONCAT
中使用 ORDER by 获取最新照片递增如 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 个字符以连接,但可以增加以下 manual
关于php - 无论表中的记录数如何,为每一列检索一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22733293/