2016-10-28 17 views
1

user_metaという表があります。そのテーブルでは、私は次の列がありますIDuserIDmeta_keymeta_valueMYSQL複数の行に基づく表から選択

私は別のテーブルにはusers、私はuser_metaテーブル行に比較したいIDがある唯一の重要な柱と呼ばれています。

users表は次のようになりますのみ

ID | userID | meta_key | meta_value 
2 | 1  | companyID | 2 
3 | 1  | user_type | staff 
4 | 5  | companyID | 2 
5 | 5  | user_type | staff 
6 | 6  | companyID | 4 
7 | 6  | user_type | customer 

私は、各userIDのための単一の行を取得したいのですが、:

ID | email | etc... 
1  | [email protected] | 
5  | [email protected] | 
6  | .... | 
7  | .... | 

だから私がどのように見えるテーブル(user_meta)を持っていると言います会社IDとuser_typeが正しい場合。

私はクエリで送信するcompanyIDが同じだから、$ companyID = 2とし、user_type = 'staff'のすべてのユーザーを検索したいとします。

したがって、user_meta.userIDはusers.IDと同じでなければならず、user_meta.companyIDは2に等しく、user_meta.user_typeは 'staff'に等しくなければなりません。

これらの条件に一致するすべてのユーザーの一覧が必要です。

結果は 5となります。彼らは両方のcompanyID = 2を持っている、との両方があなたの質問については非常にわからないuser_type = staff

+0

このテーブルとも望ましい結果、両方のテーブル構造を提供私は、ユーザーテーブルを追加 – Beginner

+0

@NewbeeDevをDATASあなたの例から来た、唯一の重要な列はIDです。 users.ID = user_meta.userID –

+0

おそらくあなたの望むクエリーがあなたの問題をもっと理解するのに役立つでしょう。 – Beginner

答えて

3

はあなたが一致する属性。

SELECT u.* 
FROM users AS u 
JOIN user_meta AS m1 ON u.id = m1.userID 
JOIN user_meta AS m2 ON u.id = m2.userID 
WHERE m1.meta_key = 'companyID' AND m1.meta_value = :companyID 
AND m2.meta_key = 'user_type' AND m2.meta_value = 'staff' 
+0

これは私が望んでいた方法で動作しているようです。私は確実にコーディングを終了します。ありがとうございました! –

0
SELECT `users`.`id`, 
     `Company`.`meta_value`, 
     `UserType`.`meta_value` 
FROM `users` 
     JOIN `user_meta` `Company` 
     ON `Company`.`userid` = `users`.`id` 
     JOIN `user_meta` `UserType` 
     ON `UserType`.`userid` = `users`.`id` 
WHERE `UserType`.`meta_value` = 'staff' 
     AND `Company`.`meta_value` = 2 

https://gyazo.com/de8d9124418f65b993d708c80c309325

0

を持っています。私は、これはあなたが望むかもしれないものであると仮定しています:あなたは、各一回user_metaに参加する必要があり

select * from Users where ID in (
select userID from user_meta where (meta_key = 'companyID' and meta_value = 2) or (meta_key = 'user_type' and meta_value = 'staff') 
); 
+1

これは、会社2にいるかスタッフであるすべての人を取得しますが、両方である必要はありません。 – Barmar

+0

@Barmarああ、あなたは正しい。私は質問を正しく取得していない –

+0

@PremRajはいあなたの試みに感謝、私は質問が少し混乱している知っている。 –

関連する問題