MYSQL 根据多行从表中选择

Dyl*_*oss 1 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     |    ....   |
Run Code Online (Sandbox Code Playgroud)

假设我有一个表(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
Run Code Online (Sandbox Code Playgroud)

我想为每个检索一行userID,但前提是公司 ID 和 user_type 正确。

我想检索具有与我在查询中发送的相同 companyID 的所有用户,因此假设 $companyID=2,然后是具有 =' user_typestaff' 的所有用户。

因此 user_meta.userID 必须等于 users.ID,user_meta.companyID 必须等于 2,user_meta.user_type 必须等于 'staff'。

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

userID返回结果为1 和 5。他们都有companyID = 2,而且都有user_type = staff

Bar*_*mar 5

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'
Run Code Online (Sandbox Code Playgroud)