2017-04-03 5 views
0

別のカンマで区切られたレコードでレコードを区切った場合、レコードを取得し、私は3つのテーブル1つのコンマの見つかったマッチが

  1. user
  2. service
  3. userServices

ユーザー表

を持っています
Id | Name | Status 
------------------------ 
1 | User1 | y 
2 | User2 | y 
3 | User3 | y 
4 | User4 | y 

サービス表

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 

を試すことができます(入力中のグループの数と入力し、31,2,3を交換、またはあなたもSQL自体にそれを計算できます)あなたの助けを

+0

感謝あなたのグループの数はどういう意味ですか? –

+0

サービスの量は入力されています。1,2,3は3、1,3,5,7,9は5です。 –

関連する問題