MYSQL Выбор из таблиц на основе нескольких строк

У меня есть таблица 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

Solutions Collecting From Web of "MYSQL Выбор из таблиц на основе нескольких строк"

Вам нужно присоединиться к 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 

https://gyazo.com/de8d9124418f65b993d708c80c309325