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应该是1and 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 回答