Bạn có thể sắp xếp theo position, rand()
để có một thứ tự ngẫu nhiên trong mỗi position
vách ngăn. Sau đó, sử dụng biến để liệt kê các bản ghi của position
phân vùng:
SELECT q_id, position, qtn, level, rn
FROM (
SELECT q_id, position, qtn, level,
@rn := IF(@pos = position, @rn + 1,
IF(@pos := position, 1, 1)) AS rn
FROM (
SELECT *
FROM tbl_question
WHERE level = '1'
ORDER BY position, rand() ) a
CROSS JOIN (SELECT @rn := 0, @pos := 0) AS vars ) b
WHERE b.rn <= 2
ORDER BY position
Truy vấn bên ngoài sử dụng @rn
để chỉ chọn hai bản ghi từ mỗi position
phân vùng.