Справка по MYSQL-запросу (таблица EAV) - PullRequest
1 голос
/ 17 июля 2010

У меня есть следующий запрос для поиска клиентов, которые отвечают ДА на определенный вопрос, " ИЛИ ", НЕТ на другой вопрос.

SELECT customers.id
FROM customers, responses
WHERE (
(
responses.question_id = 5
AND responses.value_enum = 'YES'
)
OR (
responses.question_id = 9
AND responses.value_enum = 'NO'
)
)
GROUP BY customers.id

, который работает нормально.Однако я хочу изменить запрос, чтобы получить клиентов, которые отвечают ДА на конкретный вопрос " И ", а НЕТ - на другой вопрос.

Есть идеи, как мне этого добиться?

PS - Ответы над таблицей представлены в формате EAV, т.е.строка представляет атрибут, а не столбец.

Ответы [ 2 ]

3 голосов
/ 17 июля 2010

Я предполагаю, что у вас есть столбец с именем customer_id в таблице ответов. Попробуйте присоединить таблицу ответов к себе:

SELECT Q5.customer_id
FROM responses Q5
JOIN responses Q9 ON Q5.customer_id = Q9.customer_id AND Q9.question_id = 9
WHERE Q5.question_id = 5
AND Q5.value_enum = 'YES'
AND Q9.value_enum = 'NO'
0 голосов
/ 17 июля 2010

Примерно так:

SELECT distinct
  c.id
FROM 
  customers c
WHERE
  exists (select 1 from responses r where r.customer_id = c.id and r.response_id = 5 and r.value_enum = 'YES')
  and exists (select 1 from responses r2 where r2.customer_id = c.id and r2.response_id = 9 and r2.value_enum = 'NO')

Я сделал предположение об отсутствующем условии join, измените его в соответствии с вашей схемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...