Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
выборка случайной записи без повторений (Vishenko) 31/10/2007 - 15:26:49
      Re: выборка случайной записи без повторений (EuGen) 08/11/2007 - 12:55:37



From: Vishenko - 31/10/2007 - 15:26:49
Subject:выборка случайной записи без повторений
-----------------
Есть база вопросов около 30 тыс. записей.
Пользователей около 1000.
Как сделать эффективную выборку, чтобы единожды выбранные пользователем записи не повторялись?
Для выборки использую

select * from question order by rand() limit 1

Работает шустро.
создал таблицу

create table lookup(user_id INT, question_id INT)

для именной регистрации уже заданных вопросов.
Случайная выборка преобразовалась в

select * from question where id NOT IN (select question_id from
lookup where user_id=user) order by rand() limit 1

работает медленно.
Разбил задачу на две
сначала выбираю только заданные вопросы

select question_id from lookup where user_id=user

и перлом создаю строку типа $lookup="12,45,6000...3234,10007"
подставляю эту строку в запрос на случайную выборку

select * from question where id NOT IN ($lookup) order by rand() limit 1

Заработало быстрее, но всё-равно, при 5000 записей на посетителя начинает тормозить.

Создавать для каждого пользователя таблицу зАданных (или незаданных) вопросов не хочется. 1000*300000 - около 30 млн. записей. Бред.

Кто-нибудь сталкивался с подобной проблемой?


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
32409



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |