문제

나는 두 개의 테이블이 있습니다 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 진술이지만 여전히 적절한 결과를 얻을 수 없습니다. 두 개를 사용해야합니까? SELECT 진술 또는 그것을 처리하는 또 다른 방법이 있습니까? JOIN 또는 UNION?

도움이 되었습니까?

해결책

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`

다른 팁

Anser가 제안하는 방식에서 "차량"의 반복 값을 얻습니다. 더 나은 방법은 결과를 그룹화하는 것입니다. 가입없이 시도하십시오.

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`

모두를 위해 분명히하겠습니다!

: 3 열 인쇄 테이블 :

  1. 차량 (제목) 차량 테이블.
  2. 각 차량에 대한 의견 금액 코멘트 테이블.
  3. 각 차량의 이미지 양 이미지 테이블.

예상 출력 (예제):

+----------------------+----------------+--------------+
|        title         | comments_count | images_count |
+----------------------+----------------+--------------+
| BMW X6               |             35 |            9 |
| Audi A6              |              3 |            5 |
| Volkswagen Passat B6 |             78 |            6 |
| Volkswagen Passat B5 |            129 |            4 |
+----------------------+----------------+--------------+

해결책:

SELECT 
    vehicles.title,
    (SELECT COUNT(*) FROM comments WHERE vehicles.id = comments.vehicle_id) AS comments_count,
    (SELECT COUNT(*) FROM images WHERE vehicles.id = images.vehicle_id) AS images_count
FROM vehicles
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top