MYSQL从基于多行的表中选择

时间:2016-10-28 01:51:51

标签: php mysql sql

我有一张名为user_meta的表格。在该表格中,我有以下列:IDuserIDmeta_keymeta_value

我有另一个名为users的表,唯一重要的列是ID,我希望将其与user_meta表行进行比较。

users表格如下:

ID    |    email   | etc...
1     |    email@test.com  |
5     |    testa@a.com   |
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'。

我想要一个符合这些条件的所有用户的列表。

结果将是userID 1& 5返回。它们都有companyID = 2,并且都有user_type = staff

3 个答案:

答案 0 :(得分: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'

答案 1 :(得分: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

答案 2 :(得分: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')
);