2012-03-30 8 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

「悪い結果」が何を意味するのか説明してもよかったです。 –

+0

悪い結果の意味は、私にはあまりにも多くの結果を与えています。結果の一部は、どちらのクエリにも表示されません(個別に照会された場合)。 –

+0

質問はairports.nameの結果を2番目と3番目のairport.nameの結果に変更しています。たとえば、2番目の空港名はロンドンで、3番目はルートンです。それは20000の結果を引き出し、すべての名前をLondon/Lutonに変更します。正しい結果は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 

また、私は(あなたがor代わりの||を書いている - 非常に一貫性のある見えない)AND代わりの&&を使用してお勧めしますが、よりよいのためにちょうど私の意見のthats読みやすさに違いはありません。

+0

解決しました。助けてくれてありがとう –