Question

J'ai deux tables, une table véhicule avec des colonnes:

  • id
  • stock
  • année
  • make
  • modèle

et une table images avec des colonnes:

  • id
  • id_véhicule
  • nom
  • légende
  • minuscule (1)

J'essaie de répertorier les informations du véhicule, son image par défaut et le nombre total d'images du véhicule. J'utilise actuellement l'instruction SELECT suivante:

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

J'utilisais initialement:

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

mais le nombre d'images ne serait alors que de 1 ou 0 selon qu'il y avait une image par défaut dans la base de données. J'ai essayé d'utiliser UNION et d'autres instructions SELECT mais je ne parviens toujours pas à obtenir un résultat correct. Dois-je utiliser deux instructions SELECT ou existe-t-il un autre moyen de la gérer avec JOIN ou UNION ?

Était-ce utile?

La solution

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`

Autres conseils

Comme le suggère le répondeur, vous obtenez des valeurs répétées de "véhicule". Une meilleure façon est de regrouper les résultats. Essayez sans 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`

Permettez-moi de clarifier les choses pour tout le monde!

Tâche : imprimer un tableau à 3 colonnes:

  1. Véhicules (titres) du tableau Véhicules .
  2. Nombre de commentaires pour chaque véhicule dans le tableau commentaires .
  3. Nombre d'images pour chaque véhicule à partir du tableau images .

Résultats attendus (uniquement un exemple) :

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

Solution :

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top