Задать вопрос
@vostotskiy

Как отобрать голосования, в которых не принимал участия конкретный пользователь?

Всем доброго времени суток.
Не могу въехать в элегантное решение проблемы. Хочу для пользователя отображать только те запросы, в которых он не принимал голосования.

Есть таблица vote, основа опроса, она связана один ко многим с таблицей vote_answer.
Таблица ответов в свою очередь содержит связь один ко многим с vote_result.
Чтобы получить голосовавших пользователей делаю такой запрос со сравнением IP адреса клиента.

SELECT *
FROM `poll`
INNER JOIN poll_answer ON poll.id = poll_answer.poll_id
INNER JOIN poll_result ON poll_answer.id = poll_result.poll_answer_id
WHERE CURDATE() BETWEEN poll.date_begin AND poll.date_end
AND poll_result.vote_ip ="222"


Подскажите, пожалуйста, в какую сторону копать.
Заранее спасибо.
  • Вопрос задан
  • 149 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
denman1985
@denman1985
SQL, Oracle Forms/Reports dbd
Если рассматривать это как те опросы где он принимал участие
SELECT *
FROM `poll`
INNER JOIN poll_answer ON poll.id = poll_answer.poll_id
INNER JOIN poll_result ON poll_answer.id = poll_result.poll_answer_id
WHERE CURDATE() BETWEEN poll.date_begin AND poll.date_end
AND poll_result.vote_ip ="222"


То те где не принимал:
SELECT * 
FROM `poll` as b
WHERE NOT EXISTS (SELECT poll.id 
FROM `poll`
INNER JOIN poll_answer ON poll.id = poll_answer.poll_id
INNER JOIN poll_result ON poll_answer.id = poll_result.poll_answer_id
WHERE CURDATE() BETWEEN poll.date_begin AND poll.date_end
AND poll_result.vote_ip ="222"
AND b.id = poll.id)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@AnneSmith
самая ленивая
IP наверно не очень надежно
может проще в cookies хранить id запросов?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы