()에있는 MySQL
내 질문은 다음과 같습니다.
SELECT * FROM table WHERE id IN (1,2,3,4);
사용자 그룹에 사용하고 사용자는 둘 이상의 그룹에 속할 수 있습니다. 그러나 레코드에 1과 3과 같은 여러 ID가 있으면 mySQL이 해당 행을 반환하지 않는 것 같습니다.
그 행도 얻을 수있는 방법이 있습니까?
귀하의 검색어는
SELECT * FROM table WHERE id='1' or id='2' or id='3' or id='4';
일치하는 결과 만 반환합니다.
복잡성을 피하는 한 가지 방법은 데이터 유형을 SET
. 그런 다음 FIND_IN_SET를 사용할 수 있습니다.
SELECT * FROM table WHERE FIND_IN_SET('1', id);
데이터베이스 디자인이 잘못되어 데이터베이스 정규화에 대해 읽어야합니다 ( wikipedia / stackoverflow ).
나는 당신의 테이블이 다음과 같은 것으로 가정합니다
TABLE
================================
| group_id | user_ids | name |
--------------------------------
| 1 | 1,4,6 | group1 |
--------------------------------
| 2 | 4,5,1 | group2 |
따라서 사용자 그룹 테이블에서 각 행은 하나의 그룹을 나타내고 user_ids
열에는 해당 그룹에 할당 된 사용자 ID 집합이 있습니다.
이 테이블의 정규화 된 버전 은 다음과 같습니다.
GROUP
=====================
| id | name |
---------------------
| 1 | group1 |
---------------------
| 2 | group2 |
GROUP_USER_ASSIGNMENT
======================
| group_id | user_id |
----------------------
| 1 | 1 |
----------------------
| 1 | 4 |
----------------------
| 1 | 6 |
----------------------
| 2 | 4 |
----------------------
| ...
그런 다음 할당 된 그룹이있는 모든 사용자, 그룹의 모든 사용자 또는 모든 사용자 그룹 또는 생각할 수있는 모든 것을 쉽게 선택할 수 있습니다. 또한 SQL 쿼리가 작동합니다.
/* Your query to select assignments */
SELECT * FROM `group_user_assignment` WHERE user_id IN (1,2,3,4);
/* Select only some users */
SELECT * FROM `group_user_assignment` t1
JOIN `group` t2 ON t2.id = t1.group_id
WHERE user_id IN (1,4);
/* Select all groups of user */
SELECT * FROM `group_user_assignment` t1
JOIN `group` t2 ON t2.id = t1.group_id
WHERE t1.`user_id` = 1;
/* Select all users of group */
SELECT * FROM `group_user_assignment` t1
JOIN `group` t2 ON t2.id = t1.group_id
WHERE t1.`group_id` = 1;
/* Count number of groups user is in */
SELECT COUNT(*) AS `groups_count` FROM `group_user_assignment` WHERE `user_id` = 1;
/* Count number of users in group */
SELECT COUNT(*) AS `users_count` FROM `group_user_assignment` WHERE `group_id` = 1;
이렇게하면 데이터베이스를 더 쉽게 업데이트 할 수 있습니다. 새 할당을 추가하려면에서 새 행을 삽입하기 만하면 group_user_assignment
됩니다 group_user_assignment
. 할당을 제거하려면에서 행을 삭제하기 만하면됩니다 .
데이터베이스 디자인에서 할당을 업데이트하려면 데이터베이스에서 할당 집합을 가져 와서 처리하고 업데이트 한 다음 데이터베이스에 다시 작성해야합니다.
여기에 sqlFiddle 이 있습니다.
참고 URL : https://stackoverflow.com/questions/9736284/mysql-where-in
'programing' 카테고리의 다른 글
-webkit-margin은 텍스트에 원하지 않는 여백을 추가합니다. (0) | 2020.10.27 |
---|---|
서명되지 않은 길이는 몇 바이트입니까? (0) | 2020.10.27 |
Android 예외 처리 모범 사례? (0) | 2020.10.27 |
C / C ++의 고정 길이 데이터 유형 (0) | 2020.10.27 |
SqlServer 용 C #에서 간단한 SQL 쿼리를 이스케이프하는 방법 (0) | 2020.10.27 |