2017-03-10 58 views
1

我有兩個表(汽車和car_images)如何選擇基於另一種選擇的行

cars 
---- 
id 
brand 
model 
... 

car_images 
---------- 
id 
car_id 
name 
... 

每輛汽車可以有多個圖像中的多個行...

什麼是最好的方式來選擇所有的汽車與他們的圖像?

這就是我要做的事與本地PHP PDO,但我不知道這是否是最好和最快的方式...

$sth = $dbh->query("SELECT * FROM cars"); 

$sth_images = $dbh->prepare("SELECT * FROM car_images WHERE car_id = :car_id"); 

while($row = $sth->fetch()){ 
    $sth_images->execute(['car_id' => $row['id']]); 
    // ... 
} 
+0

使用'LEFT JOIN'代替 – teeyo

回答

3

你可以做LEFT JOIN等你拿車也如他們沒有圖像

SELECT * FROM cars LEFT JOIN car_images ON cars.id = car_images.car_id WHERE cars.id = :car_id 

UPDATE

如果您需要任何車輛ID或汽車圖片ID上班,上面不會有理想的結果。這將是更好的:

SELECT car_images.car_id, car_images.id AS image_id, car_images.name FROM cars LEFT JOIN car_images ON cars.id = car_images.car_id WHERE cars.id = :car_id 

一遍修正:)

+0

但此查詢將有大量的重複數據的結果! – BBeta

+0

第一個查詢還會返回具有重寫ID的無用數據。第二個查詢將根據您傳遞給PDO的車輛ID返回車輛ID,圖像ID和圖像名稱的列表。 – Yolo

相關問題