Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > ВЫбрать не повторяющийся вопрос


Автор: MrDmitry 6.3.2012, 23:46
Здравствуйте, помогите пожалуйста составить sql запрос на выборку из базы данных не повторяющийся вопроса.

Есть таблицы со следующими структурами

таблица quest(таблица с вопросами)
id - номер вопроса
quest - сам вопрос
answer - правильный ответ на вопрос

таблица log(таблица в которой хранятся все вопросы уже использованные)
id - номер лога
user_id - номер пользователя
date - дата ответа
quest_id - номер использованого вопроса

Нужно получить из таблицы quest вопрос который не использовался в таблице log у пользователя

Пробовал сделать так:


Код

select quest.quest from  quest, log where log.user_id=1 and  quest.id!=log.guest_id

Я знаю что таким образом я бы не получил то что мне нужно, я надеялся получить список всех вопросов которые небыли задействованы в log и из них уже на php рандомно выберать любой вопрос. Но все мои затеи потерпели фиаско

Автор: Gluttton 7.3.2012, 00:14
Если я ничего не напутал, то:

1. Из таблицы log выбираем (можно с distinct) те quest_id, которые соответсвуют user_id - это те вопросы, на которые когда-либо пользователь отвечал.
2. Делаем внешнее соединение полученного результата с таблицей quest, и из полученного множества выбираем записи со значением NULL в поле quest_id - это те вопросы, которые никогда не попадали в таблицу логов для данного пользователя.

Автор: AndreyIQ 7.3.2012, 07:05
Код

select quest 
from quest 
left join log on quest_id = quest.id and log.user_id = 1 
where log.quest_id is null

Автор: MrDmitry 7.3.2012, 15:33
Спасибо. А можно как то сделать чтоб на sql вопрос из не повторяющихся выбирался рандомно?

Автор: Zloxa 7.3.2012, 16:18
отсортировать по случайному значению.
Функции генераторов случайных чисел не стандартизированы и сугубо платформоспецифичны.

Автор: MrDmitry 8.3.2012, 01:26
отсортировать по случайному значению - это как? если как я понимаю на sql нет генератор случайных чисел

Автор: Zloxa 8.3.2012, 23:12
Еще раз повторяю, это специфично для платформы.
Например для оралкла это было бы как-то так:
Код

order by dbms_random.value

Поищите функцию герератора случайных чисел в документациии для своей платформы. Уверен, вы что-то найдете. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)