首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL select -如果与同一列中的2个值匹配,则返回值

MySQL select -如果与同一列中的2个值匹配,则返回值
EN

Stack Overflow用户
提问于 2017-03-03 03:56:08
回答 2查看 570关注 0票数 1

有没有MySQL专家?

我有一个身份验证脚本,它将用户名传递给MySQL查询,如果用户名有%s2ember%,则返回用户名;如果不是s2member,则返回null

表名为usermeta

代码语言:javascript
复制
****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”?

EN

回答 2

Stack Overflow用户

发布于 2017-03-03 03:59:27

可以使用exists运算符将这两行关联起来

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2017-03-03 04:13:30

您可以对表使用自连接,并通过用户by匹配行。如下所示:

代码语言:javascript
复制
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"%'

一般来说,连接被认为比等效子查询的性能稍高,但在我看来,子查询通常更具可读性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42564750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档