복붙노트

[SQL] 여러 행을 기준으로 테이블에서 MYSQL 선택

SQL

여러 행을 기준으로 테이블에서 MYSQL 선택

나는 user_meta라는 테이블이 있습니다. 그 테이블에서 나는 다음과 같은 열이 : ID, 사용자 ID, meta_key, meta_value을

나는 사용자라는 다른 테이블에, 나는 user_meta 테이블 행에 비교하려는 ID가 존재 유일한 중요한 열이.

사용자 테이블 외모가 좋아 :

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

나는 각 사용자 ID에 대해 하나의 행을 검색하고 싶지만, 회사 ID 및 사용자 유형이 올바른 경우에만.

내가 쿼리를 보낼 것 같은 회사 ID를 가진 모든 사용자를 검색 할, 그래서하자가 $ 회사 ID = 2 및 USER_TYPE = '직원'이 모든 사용자를 말한다.

그래서 user_meta.userID는 users.ID 동일해야하며, user_meta.companyID 2와 동일해야하며, user_meta.user_type은 '직원'와 동일해야합니다.

나는이 기준과 일치하는 모든 사용자의 목록을합니다.

결과는 사용자 ID 1 5가 반환 될 것입니다. 둘 다 회사 ID = 2가, 둘 다 USER_TYPE = 직원이

해결법

  1. ==============================

    1.당신은 당신이 일치하려는 각 속성에 대한 한 번 user_meta에 가입해야합니다.

    당신은 당신이 일치하려는 각 속성에 대한 한 번 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'
    
  2. ==============================

    2.아니 아주 확실 질문에 대해. 나는 이것이 당신이 할 수 있습니다 무엇을 가정하고 있습니다 :

    아니 아주 확실 질문에 대해. 나는 이것이 당신이 할 수 있습니다 무엇을 가정하고 있습니다 :

    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')
    );
    
  3. ==============================

    3.

    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

  4. from https://stackoverflow.com/questions/40296781/mysql-select-from-tables-based-on-multiple-rows by cc-by-sa and MIT license