一尘不染

MYSQL从基于多行的表中选择

mysql

我有一张叫的桌子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正确。

我想检索在查询中发送的具有相同companyID的所有用户,因此,假设$ 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


阅读 268

收藏
2020-05-17

共1个答案

一尘不染

您需要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'
2020-05-17