このセットアップのmysqlデータベースがあります(この質問に関係のないフィールドを省略しています)
users
id #primary key
user_group_teachers
id #primary key
teacher_id #foreign key to users.id
user_group_id #foreign key to users_groups.id
user_groups
id #primary key
user_group_members
id #primary key
pupil_id #foreign key to pupils.id
user_group_id #foreign key to users_groups.id
pupils
id #primary key
「user_ids」と呼ばれる配列にユーザー ID のコレクションがあります。
これらのユーザー ID ごとに、そのユーザーに関連付けられている生徒 ID を
user -> user_group_teachers -> user_groups -> user_group_members -> pupils
協会。つまり、テーブル間の何らかの結合です。
だから、私は行が次のように見える何らかの結果を得たいと思っています
[1, [6,7,8,9]]
ここで、1 は教師の ID、[6,7,8,9] は生徒の ID です。各生徒 ID が 2 番目のリストに 1 回だけ表示されるようにします。
できるだけ少ない数のクエリでこれを行う方法を誰かに教えてもらえますか (または、より広く、できるだけ効率的に)。通常、user_ids には 1000 から 10,000 の ID があります。
私はこれを ruby スクリプトで行っているので、クエリ間で結果を変数 (配列またはハッシュ) として保存できます。
ありがとう!ライハンの最大編集
Lyhan - ありがとうございますが、あなたの解決策はうまくいかないようです。たとえば、結果の最初の行で、あなたの方法を使用して、私は持っています
| user_id | group_concat(pupils.id separator ",")
| 1 | 2292
しかし、関連する瞳孔 ID をゆっくりと段階的に取得すると、異なる結果が得られます。
select group_concat(user_group_teachers.user_group_id separator ",")
from user_group_teachers
where user_group_teachers.teacher_id = 1
group by user_group_teachers.teacher_id;
私は得る
| group_concat(user_group_teachers.user_group_id separator ",")
| 12,1033,2117,2280,2281
これらの値 (user_group ID) を別のクエリに差し込む:
select group_concat(user_group_members.pupil_id separator ",")
from user_group_members
where user_group_members.user_group_id in (12,1033,2117,2280,2281)
group by user_group_members.user_group_id;
私は得る
| group_concat(user_group_members.pupil_id separator ",")
| 47106,47107
group_concat メソッドをありがとう、それは便利です:)