2017-03-02 11 views
1

MySQLの専門家はいますか?MySQLの選択 - 同じ列に2つの値が一致する場合の戻り値

は、私は、MySQLのクエリにユーザー名を渡し、

テーブル名がusermetaあるs2memberない場合は、そのユーザー名がある場合%s2member%のユーザー名を返すか、nullを返します認証スクリプトを持って

****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にLIKE "s2member"がある場合、クエリは "paule"というメタ値を返すこともできますか?

答えて

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"%') 
+0

ありがとう - これは、webminでテストするときにLIKEから二重引用符を削除する必要がありましたが、他の応答としてWebminの問題にも二重引用符が含まれているかどうかはわかりません。 – Paul

+0

私はちょうど気づいた、私はこれがすべての関連するユーザーを返すと思いますか?クエリで指定されたユーザーが返されました。しかし、ありがとう:) – Paul

+0

@Paulあなたはそれのために別の条件を追加することができます - 私はそれを私の答えにそれを編集しました。 – Mureinik

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"%' 

一般的には、同等のサブクエリよりもわずかによりパフォーマンスであると考えられますが、私の意見では、サブクエリは、多くの場合、より読みやすいです参加します。

+0

答えをありがとう、私はサブのクエリは、MySQLの学習者のために少し読みやすいことに同意します。多くのありがとう – Paul

+0

これは正しい答えですが、私の評判が低いため、私はそれをマークできるかどうかわかりません。助けてくれてありがとう。これまで私から多くの時間がかかってきました!ビールの時間、あなたに歓迎! :) – Paul

関連する問題