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

标签 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();

它工作正常,但如果我在数据库中有更多照片,我会得到更多记录,这取决于照片记录。 无论照片表中有多少条记录,我应该怎么做才能获得每辆车一条记录?

编辑:LIMITDISTINCT 无效。

最佳答案

你可以使用 GROUP_CONCATSUBSTRING_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/

相关文章:

php - 在单个表中显示 MySQL 结果

php - 如何在 .htaccess 中输入多个 PHP 值?

php - 在 MeekroDB 中是否有任何正确的方法来转义没有括号的数组?

mysql - 将查询简化为案例

python - 在没有提交的情况下获得最后的PK?

python - 在数据库查询中使用占位符不起作用

mysql - SQL 语法不正确附近

javascript - 如何将 div 标签的 id、名称和值传递给 JavaScript 函数

sql - 在 spark sql 中用 LIMIT 描述

javascript - 在开发网站时,DreamWeaver 这样的 IDE 和 Drupal 这样的 CMS 有什么不同