Frage

Ich habe zwei Tabellen, eine vehicle Tabelle mit Spalten:

  • id
  • stock
  • year
  • make
  • model

und eine images Tabelle mit Spalten:

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

Ich versuche, die Fahrzeuginformationen, die Standardbild aufzulisten, und eine Gesamtanzahl von Bildern das Fahrzeug hat. Derzeit bin ich mit der folgenden SELECT Anweisung:

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

ich zunächst wurde mit:

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

aber dann zählen die Bilder wären nur 1 oder 0 abhängig, wenn es ein Standardbild in der Datenbank ist. Ich habe UNION und andere SELECT Aussagen versucht mit, aber ich bin immer noch nicht das gewünschte Ergebnis zu erhalten. Muß ich zwei SELECT Aussagen verwenden, oder gibt es eine andere Möglichkeit, es mit JOIN oder UNION zu behandeln?

War es hilfreich?

Lösung

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`

Andere Tipps

In der Art und Weise die Antwort schon sagt, erhalten Sie die Werte von „Fahrzeug“ wiederholt. Ein besserer Weg ist, um Gruppenergebnisse. Versuchen ohne 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`

Lassen Sie mich es für alle klar machen!

Task : Druck 3 Spalten Tabelle:

  1. Vehicles (Titel) von Fahrzeuge Tabelle.
  2. Anzahl der Kommentare für jedes Fahrzeug von Kommentare Tabelle.
  3. Anzahl der Bilder für jedes Fahrzeug von Bilder Tabelle.

Erwarteter Ausgang (nur ein Beispiel) :

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

Lösung :

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top