Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL select-如果匹配同一列中的2个值,则返回值_Mysql_Sql_Select - Fatal编程技术网

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

MySQL select-如果匹配同一列中的2个值,则返回值,mysql,sql,select,Mysql,Sql,Select,有MySQL专家吗 我有一个auth脚本,它将用户名传递给MySQL查询,如果该用户名有%s2member%,则应返回用户名;如果不是s2member,则应返回null 表名为usermeta ****user_id********meta_key********meta_value**** 1 nickname jsmith 1 capabilities a:1:{s:13:"admin

有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”(如果他有s2member)的查询


我的问题:如果一个查询在另一个meta_值中有LIKE“s2member”,那么它是否可能返回meta_值“paule”

您可以使用
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"%')

您可以对表使用自连接,并按userid匹配行。大概是这样的:

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"%'
选择
u1.meta_值
从…起
用户元u1
参加
用户元u2
在…上
u1.userid=u2.userid
哪里
u1.meta_值=“”
和u1.meta_key='昵称'
和u2.meta_key='capabilities'
和u2.meta_值,如“%”s2member“%”

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

谢谢-这是可行的,尽管在webmin中测试时我不得不从类似问题中删除双引号,但我不确定webmin问题作为另一个回复是否也有双引号,非常感谢您的帮助。我刚刚意识到,我想这会让所有相关用户都得到回报?我只需要返回一个在查询中指定的用户。谢谢:)@Paul你可以添加另一个条件-我已经将它编辑到我的答案中,请查看。太棒了!感谢您帮助我了解更多关于MySQL的信息。希望通过搜索引擎登陆此页面的其他人也会发现这一点很有用,因为我真的很难找到搜索字符串的任何内容。谢谢你的回答,我同意子查询对于MySQL学习者来说更具可读性。非常感谢这是正确的答案,但由于我的名声不好,我不确定我是否能记住它。非常感谢你的帮助。到现在为止,我已经花了很多很多时间!该喝杯啤酒了,为你干杯!:)