У меня есть таблица user_meta
. В этой таблице у меня есть следующие столбцы: ID
, userID
, meta_key
, meta_value
У меня есть другая таблица, называемая users
, единственным важным столбцом является ID
, который я хочу сравнить с user_meta
таблицы 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
, но только если идентификатор компании и user_type верны.
Я хочу получить всех пользователей, у которых есть тот же идентификатор компании, который я бы отправил в запросе, так что скажем $ companyID = 2, а затем всех пользователей, у которых есть user_type
= 'staff'.
Таким образом, user_meta.userID должен равняться users.ID, а user_meta.companyID должен равняться 2, а user_meta.user_type должен равняться «персоналу».
Я хочу список всех пользователей, которые соответствуют этим критериям.
В результате будет userID
1 и 5. Они оба имеют companyID = 2
, и оба пользователя user_type = staff
Вам нужно присоединиться к 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'
Не очень уверен в вашем вопросе. Я предполагаю, что это то, что вам может понадобиться:
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') );
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