2016-08-30 3 views
3

Ein Join haben eine Tabelle advert_property genanntSQL mehrere wo auf

pic1

Und ich habe eine Tabelle advert, die nicht wichtig ist, Anzeige Eigenschaften verbindet durch advert_id Spalte in advert_property Tabelle Anzeige.

Ich schrieb dieses SQL Anfrage:

SELECT * 
FROM `advert` 
JOIN advert_property ON advert.id = advert_property.advert_id 
WHERE (advert_property.property_id = 1 
     AND advert_property.property_value = "Манчего") 
    AND (advert_property.property_id = 2 
     AND advert_property.property_value = "козий") 

Was ich bekommen wollen, ist Anzeige, die bestimmte Eigenschaften haben, zum Beispiel: Ich möchte eine idvert, die = 1 und property_value = „Манчего“ PROPERTY_ID haben und property_id = 2 und property_value = "козий". SQL-Anfrage gibt null zurück, wie soll ich meine SQL-Anfrage ändern. Vielen Dank!

Antwort

0

Unter der Annahme, verstehe ich Ihre Frage richtig, und Sie wollen alle adverts zurückzuversetzen beide Eigenschaften haben, dann gibt es ein paar Möglichkeiten, dies zu tun mehr mit joins, exists, in, group by ...

Hier ist das Verfahren mehr mit joins:

SELECT a.* 
FROM `advert` a 
    JOIN advert_property ap ON a.id=ap.advert_id 
     AND ap.property_id = 1 AND ap.property_value = 'Манчего' 
    JOIN advert_property ap2 ON a.id=ap2.advert_id 
     AND ap2.property_id = 2 AND ap2.property_value = 'козий' 
+1

vielen dank, es funktioniert für mich! –

0

Abfrage, die Sie versuchen, wird die Ausführung nie Sie ein Ergebnis geben, weil es eine Reihe mit Eigenschaft id = 1 und Eigentum id = 2

Für gleiche Reihe zu bekommen versucht, wird es nie zwei property_ids sein (1,2).

Sie müssen Ihre Bedingungen überprüfen.

Mein, was Sie brauchen in dem Zustand, wie unten ist (Entweder-ID wird 1 oder ID wird 2 sein):

Try this:

(advert_property.property_id = 1 AND advert_property.property_value = "Манчего") 

ODER

(advert_property.property_id = 2 AND advert_property.property_value = "козий") 
+0

Ich verstehe, dass ich meine wo Bedingungen umschreiben sollte, aber wie? –

+0

Ich habe meine Antwort aktualisiert. –

0

Sie können nicht alle Spalten * zurückgeben, wobei property_idistund 2, weil ein Datensatz nicht zwei Werte für dasselbe Feld haben kann. Sie können jedoch Datensätze zurückgeben, in denen property_id1ODER2 ist. Sie könnten dann nur haben es DISTINCT advert_id zurück, wo dies der Fall ist:

SELECT DISTINCT advert_id 
FROM `advert` JOIN advert_property ON advert.id=advert_property.advert_id 
WHERE (advert_property.property_id = 1 AND advert_property.property_value = "Манчего") 
    OR (advert_property.property_id = 2 AND advert_property.property_value = "козий")