Tôi nghĩ đây có thể là những gì bạn thực sự muốn ở đây:
SELECT DISTINCT
status_id,
(SELECT MAX(user_id) FROM comments c2 WHERE c1.status_id = c2.status_id) user_1,
(SELECT user_id FROM comments c2 WHERE c1.status_id = c2.status_id
ORDER BY user_id LIMIT 1 OFFSET 1) user_2
FROM comments c1
WHERE user_id IN (2,3);
Bản trình diễn
(cập nhật của bạn Fiddle)
Chúng tôi có thể sử dụng các truy vấn con tương quan để tìm user_id
tối đa và user_id
từ thứ hai đến tối đa cho mỗi status_id
, và sau đó xoay từng cột đó thành hai cột riêng biệt. Sử dụng GROUP_CONCAT
phương pháp tiếp cận có thể thích hợp hơn ở đây, vì nó cũng sẽ cho phép bạn dễ dàng điều chỉnh bất kỳ số lượng người dùng nào dưới dạng danh sách CSV.
Ngoài ra, nếu bạn đang sử dụng MySQL 8+ trở lên, thì chúng tôi có thể tận dụng các chức năng phân tích xếp hạng, điều này cũng sẽ dễ dàng hơn.