2012-03-30 7 views
1

Beide Suche bringen die richtigen Ergebnisse zurück, aber wenn ich versuchte, die 2 Abfragen zu kombinieren, endet es mit schlechten Ergebnissen.MySQL Query Join Tabelle

$query3 = "SELECT * 
FROM airport_countries, airports 
WHERE airports.iso_country=airport_countries.code && 
airport_countries.name like '%$search%' 
ORDER BY pageviews DESC"; 

$query2 = "SELECT * 
    FROM airports 
    WHERE name like '%$search%' or 
municipality like '%$search%' 
ORDER BY pageviews DESC"; 

VVVVVVVVV

SELECT * 
FROM airport_countries, airports 
WHERE airports.iso_country=airport_countries.code && 
airport_countries.name like '%$search%' or 
    airports.name like '%$search%' or 
airports. municipality like '%$search%' 
ORDER BY pageviews DESC 

Was mache ich falsch?

+1

Es wäre auch toll, wenn Sie erklären würden, was "schlechte Ergebnisse" bedeutet. –

+0

Schlechte Ergebnisse bedeutet, es gibt mir viel zu viele Ergebnisse. Einige der Ergebnisse erscheinen nicht in beiden Abfragen (wenn sie separat abgefragt werden). –

+0

Die Abfrage ändert airports.name von dem, was es sein soll, zu den 2. und 3. airport.name Ergebnissen. So ist zum Beispiel der 2. Flughafenname London und der 3. ist Luton; Es zieht 20000 Ergebnisse und ändert alle Namen nach London/Luton. Die korrekten Ergebnisse sollten näher bei 100 liegen, jedes mit einem eindeutigen Namen. –

Antwort

4

Ihr Problem scheint der operator precedence zu sein. dass nur Klammern zu vermeiden, verwenden:

SELECT * 
FROM airport_countries, airports 
WHERE airports.iso_country=airport_countries.code 
AND (
    airport_countries.name LIKE '%$search%' 
    OR airports.name LIKE '%$search%' 
    OR airports. municipality LIKE '%$search%' 
    ) 
ORDER BY pageviews DESC 

i auch statt && mit AND würde empfehlen (Sie or statt || schreibst - sieht nicht sehr konsistent), aber das ist nur meine Meinung für eine bessere Lesbarkeit und sollte keinen Unterschied verursachen.

+0

Das hat es gelöst. Danke für die Hilfe –