我有一张名为user_meta
的表格。在该表格中,我有以下列:ID
,userID
,meta_key
,meta_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
答案 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
答案 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')
);