0

データ テーブル内で 2 つのキーワードを検索しようとしていますが、約 36 あることを知っていても、以下が解決策を返さないという問題が発生しています。

誰かがより良いクエリを書くのを手伝ってくれますか?

SELECT user_id, name, value
FROM data
    INNER JOIN fields ON data.field_id = fields.id 
WHERE name IN ('Type', 'Category')
AND value = 'Keyword 1'
AND value = 'Keyword 2'  /* If I use OR it returns 50 records of those +14 are irrelevant*/
GROUP BY user_id
HAVING COUNT(user_id)>1
ORDER BY value

何か不足していますか?

4

3 に答える 3

3

括弧が追加されていることに注意してください。

SELECT user_id, name, value
FROM data
INNER JOIN fields ON data.field_id = fields.id 
WHERE name IN ('Type', 'Category')
AND (value = 'Keyword 1'
OR value = 'Keyword 2') 
GROUP BY user_id
HAVING COUNT(user_id)>1
ORDER BY value

SQL は左から右にバインドするため、

WHERE name IN ('Type', 'Category') AND value = 'Keyword 1' OR value = 'Keyword 2'

と同等です

WHERE (name IN ('Type', 'Category') AND value = 'Keyword 1') OR value = 'Keyword 2'

そのため、余分なレコードがどこから来たのかを確認できvalue = 'Keyword 2'ますname

もちろん、次のように書くこともできます。

WHERE name IN ('Type', 'Category') AND value IN ('Keyword 1', 'Keyword 2')

これにより、優先順位の問題が解消されます。

于 2012-04-18T03:33:25.620 に答える
0

次のように条件をグループ化する必要があります。

WHERE name IN ('Type', 'Category')
AND (value = 'Keyword 1'
    OR value = 'Keyword 2' )

それ以外の場合、MySql はキーワード 2 を持つが、その名前が Type または Category ではない行を返します。

または、全文検索を調べてください。

于 2012-04-18T03:32:45.090 に答える
0

これを試して-

SELECT user_id, name, value
FROM data
    INNER JOIN fields ON data.field_id = fields.id 
WHERE name IN ('Type', 'Category')
AND value in( 'Keyword 1','Keyword 2') 
GROUP BY user_id
HAVING COUNT(user_id)>1
ORDER BY value
于 2012-04-18T07:09:19.433 に答える