Случайная выборка товара, с последующей разбивкой на страницы

Alex2004

Новичок
Случайная выборка товара, с последующей разбивкой на страницы

Всем привет!
Может подскажете как это осуществить:
Есть таблица товаров, из этой таблицы случайным образом выбираются все товары и разбиваются на страницы, как сделать так чтобы товары которые отобразились на первой странице не отображались на следующих и т.д.
 

Sam

Новичок
случайным образом выбираются все товары
это как? )

вообще
http://www.google.ru/search?hl=ru&q=%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%BD%D1%8B%D0%B9+%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4+mysql&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=
 

Alex2004

Новичок
Вот пример запроса.
select id from goods order by rand() limit начальное значение, колличество
Выборка происходит когда пользователь заходит на главную страницу.

-~{}~ 28.01.06 12:13:

Но при такой выборке очень часто на других страницах повторяются товары которые были на предыдущих страницах.
 

Фанат

oncle terrible
Команда форума
мне вот очень интересно - А ЗАЧЕМ такая х... может вообще в принципе понадобиться?
 

white phoenix

Новичок
Alex2004
А как ты себе это представляешь? Чтобы не повторялись на разных страницах при случайной сортировке нужно сохранять отсортированное множество сразу после первого показа. Откуда MySQL будет знать какие элементы уже были показаны пользователю?
 

Alex2004

Новичок
Это пожелание клиента. Вот с этим пожеланием сейчас и борюсь.

-~{}~ 28.01.06 12:36:

Вот и я думаю сохранять историю. Но подумал возможно есть более простой способ.
 

white phoenix

Новичок
Alex2004
А что он хочет? Чтобы человек пришел на сайт, получил SID, табличка отсортировалась по RAND(), запомнился порядок следования элементов, и появился постраничный вывод? Это даже со стороны пользователя неудобно помоему.

-~{}~ 28.01.06 12:42:

Проще сделать вот как: при создании сессии получи кол-во рядов в таблице, задай массив в котором каждый ключ (1,2,3...) означает номер страницы, а значение - специальное случайно выбранное (распределенное) start_pos для LIMIT'а. Этот массив сохрани в сессии, а потом для получения элементов страницы [sql]SELECT `id` FROM `goods` LIMIT $pages[N], $per_page[/sql]
 

Фанат

oncle terrible
Команда форума
Это пожелание клиента.
Приходит клиент в больницу...
- Доктор, кастрируйте меня!
-Зачем?! Молодой, симпатичный парень...
-Доктор, надо!!!
После операции.
-Ну, как самочуствие?
-Спасибо, хорошо.
-И все-таки, зачем вам это?
-Все дело в том, что моя девушка сказала,
что выйдет замуж только за еврея...
-Э-э, батенька, так вам нужно было делать
обрезание.
- А Я ЧТО СКАЗАЛ???
 

Alex2004

Новичок
Я это ему объяснял. Думаю придеться еще раз объяснять.

-~{}~ 28.01.06 12:48:

Хороший анекдот :).
 

svetasmirnova

маленький монстрик
Гы =) Проще всё. В выражение order by rand() подставляем число. Не помню, как в MySQL правильно. order by rand(NUM), кажется. Которое генерируем в скрипте случайным образом для каждого посетителя и храним в сессии. Одно(!) число, а не последовательность.

P.S.: Рома, прости, не сдержалась =)
 

white phoenix

Новичок
svetasmirnova
Я об этом варианте подумал изначально, но потом отказался т.к. сортировать приходится каждый раз всю таблицу. А если сразу распределить, то не надо.
 
Сверху