2012-03-30 114 views
1

兩個搜索帶回正確的結果,但是當我試圖合併的2個查詢,它最終給人不好的結果。MySQL查詢連接表

$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 

我在做什麼錯?

+1

如果你解釋了「不好的結果」的含義,這也很好。 – 2012-03-30 09:02:41

+0

結果不好意思,它給我太多的結果。有些結果不會出現在任何一個查詢中(當單獨查詢時)。 – 2012-03-30 09:05:40

+0

查詢正在將airports.name從它假定爲第二個和第三個airport.name結果中更改。例如,第二個機場名稱是倫敦,第三個是盧頓;它吸引了20000個結果並將所有名字改爲倫敦/盧頓。正確的結果應該接近100,每個都有不同的名字。 – 2012-03-30 09:09:12

回答

4

您的問題aseems是operator precedence。要避免這種情況,只需使用括號:

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 

我也建議使用AND代替&&(你寫or而不是|| - 看起來不是很一致),但是那只是我的意見更好可讀性並且不應該導致任何區別。

+0

解決了它。謝謝您的幫助 – 2012-03-30 09:25:07