2017-04-03 5 views
0
에게

를 쉼표로 구분 된 서로 기록을 분리하면 나는 3 개 테이블하나의 쉼표 발견 일치하는 기록

  1. user
  2. service
  3. userServices

사용자 표

이제공되는 사용자는

서비스 표는

Id | ServiceName | Status 
------------------------ 
1 | Service1  | y 
2 | Service2  | y 
3 | Service3  | y 
4 | Service4  | y 

사용자 서비스 표는

Id | UserId | ServiceId | Status 
----------------------------------------- 
1 | 1  | 1   | y 
2 | 1  | 3   | y 
3 | 1  | 2   | y 
4 | 1  | 4   | y 
5 | 2  | 2   | y 
6 | 2  | 3   | y 
7 | 2  | 4   | y 
8 | 3  | 1   | y 
9 | 3  | 3   | y 
10 | 3  | 4   | y 
11 | 3  | 2   | y 
내가 필요 내가 입력 &로 1,2,3처럼 쉼표로 구분 된 문자열로 서비스 ID를 얻을 것이다

것을 확인 이 모든 서비스.

예 : 사용자 1은 서비스 1,3,2,4를 제공하고 1,2,3은 1,3,2,4의 하위 집합이므로이 레코드를 반환해야합니다.

사용자 2는 서비스 2,3,4를 제공하므로 1,2,3은 2,3,4의 하위 집합이 아니며이 레코드는 반환되지 않습니다.

나는 사용자 ID의 FIND_IN_SET with GROUP_CONCAT을 사용해 보았지만 작동하지 않습니다.

답변

0

사용자 서비스 테이블에 중복 된 내용이 포함될 수 있습니까?

하지 않으면, 당신은

SELECT UserId FROM userServices 
WHERE serviceId IN (1,2,3) 
GROUP BY UserId HAVING COUNT(*) >= 3 

이 (입력에 그룹의 번호를 입력와 1,2,33를 교체하거나 SQL 자체를 계산조차 할 수) 시도 할 수 있습니다 당신의 도움에 대한

+0

감사 ..하지만 미안하지만 그룹의 수는 무엇을 의미합니까? –

+0

서비스 금액이 입력되었습니다. 1,2,3은 3, 1,3,5,7,9는 5입니다. –