那里有MySQL专家吗?
我有一个auth脚本,它将用户名传递给MySQL查询,如果该用户名为%s2member%则返回用户名,如果不是s2member则返回null
表名是usermeta
****user_id********meta_key********meta_value****
1 nickname jsmith
1 capabilities a:1:{s:13:"administrator";b:1;}
2 nickname paule
2 capabilities a13:"s2member";}
3 nickname mike
3 capabilities a14:"free-member";}
4 nickname mrjones
4 capabilities a15:"s2member";}
5 nickname adam
5 capabilities aw7:"s2member";}
由于此数据的布局,我不知道如何查询返回' paule' (如果他有s2成员)。
我的问题:查询甚至可以返回meta_value" paule"如果他喜欢" s2member"在另一个meta_value?
答案 0 :(得分:1)
您可以使用exists
运算符并关联两行
SELECT meta_value
FROM usertable a
WHERE meta_key = 'nickname' AND
meta_value = 'paule' AND -- EDITED IN: Just return paule
EXISTS (SELECT *
FROM usertable b
WHERE a.user_id = b.user_id AND
b.meta_key = 'capabilities' AND
b.meta_value LIKE '%"s2member"%')
答案 1 :(得分:1)
您可以对表使用自联接,并按用户ID匹配行。像这样:
select
u1.meta_value
from
usermeta u1
join
usermeta u2
on
u1.userid = u2.userid
where
u1.meta_value = '<username passed in>'
and u1.meta_key = 'nickname'
and u2.meta_key = 'capabilities'
and u2.meta_value like '%"s2member"%'
一般来说,连接被认为比等效的子查询稍微高一些,但在我看来,子查询通常更具可读性。