有没有MySQL专家?
我有一个身份验证脚本,它将用户名传递给MySQL查询,如果用户名有%s2ember%,则返回用户名;如果不是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‘(如果他有s2member)。
我的问题是:如果一个查询在另一个meta_value中有类似的"s2member“,那么他是否有可能返回meta_value "paule”?
发布于 2017-03-03 03:59:27
可以使用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"%')发布于 2017-03-03 04:13:30
您可以对表使用自连接,并通过用户by匹配行。如下所示:
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"%'一般来说,连接被认为比等效子查询的性能稍高,但在我看来,子查询通常更具可读性。
https://stackoverflow.com/questions/42564750
复制相似问题