0

私が持っているカスタムプロファイルシステムに変更して適応させる必要がある検索クエリがあります。そのシステムは次の表を使用します。

  profile_key | profile_value        | user_id
       1      |    test1             |  10
       2      |    test2             |  10
       3      |    ["test3","test4"] |  10

(検索フォームでユーザーが定義した内容に応じて)すべての行に一致するものをwhere句に追加して、次のようなuser_idを取得する必要があります。

 select user_id from table where (profile_key = 1 && profile_value regexp 'test1') && (profile_key = 3 && profile_value regexp 'test4')

定義されたすべてのprofile_keyと正規表現に一致する場合は、すべてのuser_idを取得する必要があります。

どうすればこれを達成できるか考えていますか?

よろしく。

4

3 に答える 3

1

あなたはそれが と であるprofile_keyべきだ1と言っています3。不可能だよ。

ORではなくを使用する必要がありますAND

SELECT user_id 
FROM   table 
WHERE  ( profile_key = 1 && profile_value REGEXP 'test1' ) OR ( 
       profile_key = 3 && profile_value REGEXP 'test4' ) 
于 2013-01-28T18:32:32.177 に答える
1

最も簡単な方法は、次を使用することEXISTSです。

SELECT user_id
FROM users
WHERE EXISTS (SELECT 1 FROM profiles WHERE profile_key = 1 
    AND profile_value regexp 'test1' AND profiles.user_id = users.user_id)
AND EXISTS (SELECT 1 FROM profiles WHERE profile_key = 3 
    AND profile_value regexp 'test4' AND profiles.user_id = users.user_id)

INNER JOIN一致させたい行ごとに , でこれを達成することもできます:

SELECT user_id
FROM users
INNER JOIN profiles p1 ON users.user_id = p1.user_id
INNER JOIN profiles p2 ON users.user_id = p2.user_id
WHERE p1.profile_key = 1 AND p1.profile_value regexp 'test1'
AND p2.profile_key = 3 AND p2.profile_value regexp 'test4'
于 2013-01-28T18:33:04.313 に答える
0

このような「IN」を使用するのはどうですか

select user_id 
from table 
where (profile_key = 1 && 'test1' IN profile_value) 
    && (profile_key = 3 && 'test4' IN profile_value )
于 2013-01-28T18:38:31.507 に答える