Random чисел.Без повторения значений.

Gens

Новичок
Здравствуйте. Нужно реализовать генератор чисел без повторения значений. Использовал такое выражение:
PHP:
$rand= mt_rand(1, 100);
Но тут значения все же повторяются и очень часто. Суть всех действий такая. Делается викторина. Есть база данных с вопросами которая хранится в SQLITE. Каждый вопрос имеет свой ID в таблице. Для вывода вопроса, выполняется запрос такого вида:
PHP:
$result = sqlite_query($db, "SELECT * FROM TName WHERE id=$rand");
Где $rand это ID вопроса. Допустим у нас есть несколько таблиц по 100 вопросов, выбираем одну из них и нужно что бы каждый вопрос выводился только один раз в случайном порядке за один цикл, т.е при первом обращении к таблице порядок вопросов был один, а при следующем другой. Почему я выбрал именно такой подход объяснить не могу. Еще вариант сделать запрос на выборку по базе sqlite, но как это реализовать я не могу понять. Везде пишут что
PHP:
SELECT * FROM TName ORDER BY RAND() LIMIT 10;
не подойдет. Прошу указать в какую степь лезть. И как это лучше реализовать.
 

Breeze

goshogun
Команда форума
Партнер клуба
самый простой вариант:

вытаскиваешь 100 id в массив(это не много), делаешь ему shuffle и вставляешь в таблицу со структурой типа tmp_id, question_id, session_id, is_answered
где tmp_id -- int autoincrement
question_id -- id твоих вопросов
session_id -- некий идентификатор пользовательсой сессии для ответов на вопросы
is_answered -- флаг отвечено ли

дальше по session_id и tmp_id можешь как листалку делать, так и все остальное

ЗЫ: и незачем несколько таблиц по 100 вопросов. ИМХО, достаточно одной
 

Breeze

goshogun
Команда форума
Партнер клуба
кстати флаг необязательно, для ответов вообще другая таблица подойдет
 

denisOg

Новичок
Gens
Самый хороший вариант указал Breeze. Тут уж явно не будет повторений
 

Gens

Новичок
Breeze
Большое спасибо, это именно то что мне было нужно.
По поводу нескольких таблиц. Просто вопросы на разную тематику будут.
baev
Объяснить не могу, т.к это немного глупо наверно выглядит. Просто не знал как можно это реализовать и единственный выход нашел только таким образом. Простым рэндомным перебором id и подстановкой его в запрос.
 

Breeze

goshogun
Команда форума
Партнер клуба
Gens

для разных тематик достаточно допполе завести, выйдет таблица типа
id, category_id, question и т.д.
где category_id есть идентификатор твоей тематики + индекс на это поле, а для тематик своя таблица.
 
Сверху