これは、キーワード「セクター2」のオートコンプリート関数を検索するために実行しているクエリです。
SELECT display_text,token, relevancy ,
(CASE token
WHEN token = 'sector' THEN relevancy*1000
WHEN token = '2' THEN relevancy*1000
ELSE relevancy / 100
END) as real_relevancy
FROM location_search WHERE display_text LIKE '%sector%' AND display_text LIKE '%2%'
ORDER BY real_relevancy DESC
テーブルには、id、area_id、display_text、token、relevancyの5つのフィールドがあります。表示テキストは、オートコンプリート検索結果に表示したいものです。また、トークンには、スペースで分割された表示テキストが含まれています。
表示テキスト「Sector2Noida」のように、テーブルには3つのエントリがあります
id | area_id | display_text | token | relevancy
6 | 234 | Sector 2 Noida | sector | 441
7 | 234 | Sector 2 Noida | 2 | 986
8 | 234 | sector 2 Noida | noida | 660
他のすべての表示領域についても同様です。私がここでやろうとしていることは、クエリによってかなり明確になります。つまり、より関連性の高い結果が一番上に表示されます。
問題は、最初のケースがtrueと評価され、トークンがnietherセクターでも2でもないランダムなケースで実行されることです。
結果セットの最初の結果のように
display_text | token | relevancy | real_relevancy
Sector 29 - Powergrid , Gurgaon | Powergrid | 789 | 789000
なぜそれが起こっているのですか。クエリがうまくいかなかったのはなぜですか?おそらくmはいくつかのばかげた間違いをしている。助けてください。