2012-03-30 5 views
1

Оба поиска возвращают правильные результаты, но когда я попытался объединить 2 запроса, это приводит к плохим результатам.MySQL Query Join Table

$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

Было бы здорово, если бы вы объяснили, что означает «плохие результаты». –

+0

Плохое значение результатов, это дает мне слишком много результатов. Некоторые из результатов не отображаются ни в одном запросе (при запросе отдельно). –

+0

Запрос изменяет имя airport.name, из чего он должен быть на 2-й и 3-й результаты в аэропорту.name. Так, например, второе название аэропорта - Лондон, а третий - Лутон; он извлекает 20000 результатов и изменяет все имена в Лондон/Лутон. Правильные результаты должны быть ближе к 100, каждая с отдельным именем. –

ответ

4

у вас проблема как есть 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

Это решило. Спасибо за помощь –