21

私は2つのテーブル、vehicle列を持つテーブルを持っています:

  • id
  • stock
  • year
  • make
  • model

およびimages列を持つテーブル:

  • id
  • vehicle_id
  • name
  • caption
  • default tinyint(1)

車両の情報、デフォルトの画像、および車両にある画像の総数をリストしようとしています。現在、私は次のSELECTステートメントを使用しています。

SELECT vehicle.id, vehicle.stock, vehicle.year,
    vehicle.make, vehicle.model, images.name,
    COUNT(images.id)
FROM vehicle
LEFT JOIN images
ON vehicle.id = images.vehicle_id

私は最初に使用していました:

ON vehicle.id = images.vehicle_id AND images.default = 1

ただし、データベースにデフォルトの画像があるかどうかに応じて、画像の数は1または0になります。UNIONおよび他のSELECTステートメントを使用してみましたが、まだ適切な結果を得ることができません。SELECT2 つのステートメントを使用する必要がありますか、または or で処理する別の方法はありますJOINUNION?

4

3 に答える 3

42
SELECT 
    `vehicle`.`id`, 
    `vehicle`.`stock`, 
    `vehicle`.`year`, 
    `vehicle`.`make`, 
    `vehicle`.`model`, 
    `images`.`name`,
    (
        SELECT COUNT(*) 
        FROM `images` 
        WHERE `vehicle_id` = `vehicle`.`id`
    ) AS `image_count`
FROM `vehicle`
LEFT JOIN `images`
ON `images`.`vehicle_id` = `vehicle`.`id`
WHERE `images`.`default`
于 2009-04-30T18:50:29.297 に答える
6

アンサーが示唆する方法で、「車両」の値が繰り返されます。より良い方法は、結果をグループ化することです。JOIN なしで試してください:

SELECT 
    `vehicle`.`id`, 
    `vehicle`.`stock`, 
    `vehicle`.`year`, 
    `vehicle`.`make`, 
    `vehicle`.`model`, 
    `images`.`name`,
    (
        SELECT COUNT(*) 
        FROM `images` 
        WHERE `vehicle_id` = `vehicle`.`id`
    ) AS `image_count`
FROM `vehicle`

WHERE `images`.`default`
于 2013-10-08T09:52:50.307 に答える