2016-10-28 49 views
1

我有一個表,名爲user_meta。在該表中,我有以下欄目:IDuserIDmeta_keymeta_valueMYSQL從基於多行的表中選擇

我有另一個表稱爲users,唯一重要的列有ID,我想比較於user_meta錶行。

users表如下所示:

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

所以說,我有一個表(user_meta)看起來像:

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和user_type正確。

我想檢索具有與查詢中發送的公司ID相同的所有用戶,所以我們假設$ 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我加了users表中這兩個表和也的表結構,唯一重要的列是ID。 users.ID = user_meta.userID –

+0

也許結果您希望的查詢將幫助我們更多地瞭解您的問題。 – Beginner

回答

3

您需要user_meta加入,一旦你想匹配每個屬性。

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

不太清楚你的問題。我假設這是你可能會想:

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是的謝謝你的嘗試,我知道這個問題有點混亂。 –