Как мне получить количество связанных строк в левом соединении в MySQL?

StackOverflow https://stackoverflow.com/questions/808475

Вопрос

У меня есть два стола, 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