2014-03-29 87 views
0

我想選擇一個帶有兩個連接的記錄。 我有以下查詢:檢索每列的一條記錄,而不考慮表中的數字記錄

$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沒有工作。

回答

3

您可以使用GROUP_CONCATSUBSTRING_INDEX挑選一張照片,如果你希望所有的照片,你可以只使用GROUP_CONCAT(photos.name) AS photo,你可以得到所有用英文逗號分隔列表中的照片的名字,我已經使用->group_by('vehicle.idvehicle');所以對於一個車組全部的照片將用逗號合併,但在你的問題,你說你需要的照片,所以我使用的SUBSTRING_INDEX你也可以通過在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個字符的默認限制來連接,但這可以按照manual

+1

真棒增加!我想選擇每輛車的所有照片,但我不知道如何去做。謝謝 :) – ajtamwojtek

相關問題