Nu denk ik dat ik het begrijp.
Als de gebruikers slechts één antwoord voor elke vraag hebben, dan zou dit moeten werken:
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);
BEWERKEN:
Natuurlijk kunnen gebruikers kunnen meerdere antwoorden hebben. Dit duwt me in de richting van een join
benadering in plaats van een geaggregeerde benadering. Helaas heeft zo'n aanpak een full outer join
nodig , die MySQL niet ondersteunt. Laten we dus eerst proberen te aggregeren op antwoord. Je hebt maar twee gebruikers, dus we draaien de waarden om:
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;