Bạn đã thiết kế cơ sở dữ liệu sai và bạn nên dành thời gian để đọc một số điều về chuẩn hóa cơ sở dữ liệu ( wikipedia / stackoverflow ).
Tôi cho rằng bảng của bạn trông giống như thế này
TABLE
================================
| group_id | user_ids | name |
| 1 | 1,4,6 | group1 |
| 2 | 4,5,1 | group2 |
vì vậy, trong bảng nhóm người dùng của bạn, mỗi hàng đại diện cho một nhóm và trong user_ids
cột, bạn đã chỉ định tập hợp id người dùng cho nhóm đó.
Phiên bản chuẩn hóa của bảng này sẽ trông như thế này
GROUP
=====================
| id | name |
| 1 | group1 |
| 2 | group2 |
GROUP_USER_ASSIGNMENT
======================
| group_id | user_id |
| 1 | 1 |
| 1 | 4 |
| 1 | 6 |
| 2 | 4 |
| ...
Sau đó, bạn có thể dễ dàng chọn tất cả người dùng với nhóm được chỉ định, hoặc tất cả người dùng trong nhóm, hoặc tất cả các nhóm người dùng hoặc bất cứ điều gì bạn có thể nghĩ đến. Ngoài ra, truy vấn sql của bạn sẽ hoạt động:
SELECT * FROM `group_user_assignment` WHERE user_id IN (1,2,3,4);
SELECT * FROM `group_user_assignment` t1
JOIN `group` t2 ON t2.id = t1.group_id
WHERE user_id IN (1,4);
SELECT * FROM `group_user_assignment` t1
JOIN `group` t2 ON t2.id = t1.group_id
WHERE t1.`user_id` = 1;
SELECT * FROM `group_user_assignment` t1
JOIN `group` t2 ON t2.id = t1.group_id
WHERE t1.`group_id` = 1;
SELECT COUNT(*) AS `groups_count` FROM `group_user_assignment` WHERE `user_id` = 1;
SELECT COUNT(*) AS `users_count` FROM `group_user_assignment` WHERE `group_id` = 1;
Cách này cũng sẽ dễ dàng hơn trong việc cập nhật cơ sở dữ liệu, khi bạn muốn thêm bài tập mới, bạn chỉ cần chèn hàng mới vào group_user_assignment
, khi muốn xóa bài tập bạn chỉ cần xóa hàng trong đó group_user_assignment
.
Trong thiết kế cơ sở dữ liệu của bạn, để cập nhật các bài tập, bạn sẽ phải lấy bộ bài tập của mình từ cơ sở dữ liệu, xử lý nó và cập nhật rồi ghi lại vào cơ sở dữ liệu.
Đây là sqlFiddle để chơi với.
id
dưới dạng danh sách được phân tách bằng dấu phẩy hoặc một cái gì đó, nhiều hàng sẽ trả về từ truy vấn của bạn.