Мне кажется, что это нормально, хотя я бы немного его изменил:
SELECT
poll.id,
poll.question,
a.answer
FROM tblpollquestions poll
INNER JOIN tblpollanswers a ON a.question_id = poll.id
WHERE poll.id = (
SELECT id FROM tblpollquestions WHERE NOT EXISTS (
SELECT * FROM tblpollresponses WHERE user_id = 1 AND question_id = tblpollquestions.id )
ORDER BY RAND() LIMIT 1)
Написанный таким образом должен лучше справляться с использованием индексов, а не проверять условия соединения для каждого tblpollanswers
.
Убедитесь, что уверены, , что у вас есть индекс UNIQUE
(или первичный ключ) на tblpollresponses
для (user_id, question_id)
(в таком порядке).Если вам это нужно для других запросов, вы можете добавить дополнительный индекс UNIQUE
со столбцами в обратном порядке.
Редактировать: На самом деле поместить его туда, где это может быть не очень хорошо http://jan.kneschke.de/projects/mysql/order-by-rand/Вам нужно будет explain
запросить и сравнить.