Приветствую. Есть запрос, выдающий случайный вопрос клиенту функцией ORDER BY RAND(). Задача такая. После каждого ответа, следующая случайная выборка должна игнорировать вопросы, которые уже были. Каким образом это можно сделать? При чем для каждого пользователя в отдельности.
Сохранять уже заданные вопросы в отдельной таблице.
_____________
VPS от 5$, первые 2 месяца -
бесплатно.
Placido
5.03.2013 - 15:40
Добавлять id вопросов в сесиию или куку?
Цитата |
Сохранять уже заданные вопросы в отдельной таблице. |
Как именно сохранять? Для каждого пользователя отдельную таблицу, или через запятую? Пользователей планируется очень много, до миллиона.
И как потом делать выборку на основании всех этих данных?
Цитата |
Добавлять id вопросов в сесиию или куку? |
Так это только для одного сеанса, а в другие дни?
Цитата (Dimaz @ 5.03.2013 - 14:43) |
Как именно сохранять? |
Таблица с 2мя столбцами - id ползователя, id вопроса который был задан.
Заброс будет
SELECT * FROM quest
WHERE quest.id NOT IN
(SELECT questid FROM user_quest
WHERE userid = $userid)
ORDER BY RAND();
_____________
VPS от 5$, первые 2 месяца -
бесплатно.
Цитата (Hello @ 5.03.2013 - 12:33) |
Цитата (Dimaz @ 5.03.2013 - 14:43) | Как именно сохранять? |
Таблица с 2мя столбцами - id ползователя, id вопроса который был задан. Заброс будет SELECT * FROM quest WHERE quest.id NOT IN (SELECT questid FROM user_quest WHERE userid = $userid) ORDER BY RAND(); |
Может какое-нибудь другое решение есть. По мере существования сайта количество вопросов будет расти и может достигнуть пару тысяч. Сервак будет очень долго думать.
DimazВ моём запросе, при использовании индексов, тормозить нечему.
Когда будет 10 млн вопросов, тогда будете оптимизировать
_____________
VPS от 5$, первые 2 месяца -
бесплатно.
Цитата (Hello @ 5.03.2013 - 14:35) |
Dimaz В моём запросе, при использовании индексов, тормозить нечему. Когда будет 10 млн вопросов, тогда будете оптимизировать |
Спасибо:)
innovate
5.03.2013 - 21:19
Цитата |
Когда будет 10 млн вопросов, тогда будете оптимизировать |
ORDER BY RAND()
10.000 записей: 0:18.684s
100.000 записей: 2:59.081s
1.000.000 записей: 58:20.000s
LinkСтатистика по времени запроса в конце темы.(делаем поблажку на 2007 год);
я использую другой подход,
а тут надо проверить на сколько корректно отработает запрос например с такими данными
меня лично смущает привязка к max(id)
id = 1
id = 10
id = 100
id = 1000
id = 10000
_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.