0

これは、キーワード「セクター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はいくつかのばかげた間違いをしている。助けてください。

4

1 に答える 1

0

私はいくつかのことを試し、大文字と小文字の条件を token = 'sector' から 'sector' に変更しました...現在は機能しています。

したがって、新しいクエリは次のようになります。

SELECT display_text,token, relevancy , 
(CASE token 
    WHEN 'sector' THEN relevancy*1000 
    WHEN '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

本当にばかげた間違い。

于 2012-05-25T10:43:16.747 に答える