Bây giờ tôi nghĩ rằng tôi đã hiểu nó.
Nếu người dùng chỉ có một câu trả lời cho mỗi câu hỏi, thì điều này sẽ hoạt động:
select ua.quid,
GROUP_CONCAT(IF(uid=1,answer,'') SEPARATOR '') as a1,
GROUP_CONCAT(IF(uid=20008,answer,'') SEPARATOR '') as a2
from user_answers ua
where importance <> 1 and uid in (1, 20008)
group by ua.quid
having sum(uid = 1) > 0 and
sum(uid = 20008) > 0 and
max(case when uid = 1 then answer end) <> max(case when uid = 20008 then answer end);
CHỈNH SỬA:
Tất nhiên, người dùng có thể có nhiều câu trả lời. Điều này đang thúc đẩy tôi tham gia join
chứ không phải là cách tiếp cận chỉ tổng hợp. Thật không may, cách tiếp cận như vậy cần một full outer join
, mà MySQL không hỗ trợ. Vì vậy, trước tiên hãy thử tổng hợp theo câu trả lời. Bạn chỉ có hai người dùng, vì vậy chúng tôi sẽ xoay vòng các giá trị:
select ua.quid,
GROUP_CONCAT(IF(user1 > 0, answer, '') SEPARATOR '') as a1,
GROUP_CONCAT(IF(user20008 > 0, answer, '') SEPARATOR '') as a2
from (select ua.quid, ua.answer,
max(case when ua.uid = 1 then 1 else 0 end) as user1,
max(case when ua.uid = 20008 then 1 else 0 end) as user20008
from user_answers ua
where importance <> 1 and ua.uid in (1, 20008)
group by ua.quid, ua.answer
) t
where t.user1 = 0 or t.user20008 = 0
group by ua.quid;