Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL prawidłowo porównujący i wykluczający wyniki

Teraz myślę, że to rozumiem.

Jeśli użytkownicy mają tylko jedną odpowiedź na każde pytanie, powinno to zadziałać:

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);

EDYCJA:

Oczywiście użytkownicy mogą mieć wiele odpowiedzi. To popycha mnie w kierunku join podejście, a nie podejście wyłącznie zagregowane. Niestety takie podejście wymaga full outer join , którego MySQL nie obsługuje. Spróbujmy więc najpierw agregować według odpowiedzi. Masz tylko dwóch użytkowników, więc przestawimy wartości:

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;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ograniczanie portu MySQL 3306 do hosta lokalnego za pomocą IPTABLES

  2. Nie można połączyć się ze zdalną bazą danych za pomocą php

  3. PDOstatement (MySQL):wstawienie wartości 0 do pola bit(1) daje w wyniku 1 w tabeli

  4. Jak otworzyć połączenie DB w Openshift?

  5. Brak odpowiedzi od PHP / MySQL NuSOAP