order by Rand() - для каждого пользователя свой

rotoZOOM

ACM maniac
Человеку свойственно возвращаться на просмотренные страницы, а если каждый при каждой загрузке будет что-то новое это может оттолкнуть.
 

jonjonson

Охренеть
Тогда в карусели нужен ещё сегмент - сегмент блоков готовящихся к переработке. И связывать их как-то с неадекватным клиентом. Я так понимаю через сессию. При этом силы разработчика будут тратится на сомнительный сервис. Он не нужен ни товародателям, ни клиентам. Товародатель старается как можно большему кол-ву посетителей засветить товар в надежде клика. Посетитель смотрящий рандомный список хочет видеть всё новые товары. Хотя и здесь есть сомнения. Всё же за покупками ходят целенаправленно.

Я бы рекомендовал не делать многостраничного переходящего списка рандомных товаров, а создать список просто рандомных товаров с одной ссылкой "Ещё!"
 

craz

Нестандартное звание
хыхы ваще тогда красиво(люблю извращения)))) получается смотри

заходим на страницу) рисуем 1 2 - запоминаем [First] = array(Id`s From First Page) - жмем 2(выбираем по рандому, но только не [First]) - соответственно запоминаем [Second]=array(Id`s From Second Page) рисуем 1 2 3 - можно как нить обыграть появление новой страницы хоть тоже мигание)))

Класс?)
 

rotoZOOM

ACM maniac
Я бы рекомендовал не делать многостраничного переходящего списка рандомных товаров, а создать список просто рандомных товаров с одной ссылкой "Ещё!"
Отлично! Спасибо. Надо предложить заказчику. Собственно, практически тоже самое craz предлагал. :)
 

Вурдалак

Продвинутый новичок
Тема интересная. Сам при возникновении такой задачи сделал кнопку. Но как пользователь, мне кажется это не очень удобным именно из-за того, что иногда возникает потребность возвращаться назад. Чуть попозже постараюсь показать один из возможных вариантов, храня в сессии только seed для генератора псевдослучайных чисел.
 

Вурдалак

Продвинутый новичок
Требуется ввести поле seq для задания порядкового номера каждой записи. Это самое неприятное. Идея такая:
PHP:
class FakeArray
{
    protected $_arr;

    public function __construct()
    {
        $this->_arr = array();
    }

    public function get($i)
    {
        if( isset($this->_arr[$i]) )
        {
            return $this->_arr[$i];
        }

        $this->_arr[$i] = $i + 1;

        return $this->_arr[$i];
    }

    public function swap($i, $j)
    {
        list($this->_arr[$i], $this->_arr[$j]) = array($this->get($j), $this->get($i));
    }
}

mt_srand($_SESSION['seed']);

$fakeArr = new FakeArray;
$pos = array();

for($i = 0; $i < $offset + $limit; $i++)
{
    $fakeArr->swap($i, mt_rand($i, $total - 1));

    if( $i >= $offset )
    {
        $pos[] = $fakeArr->get($i);
    }
}
Полученный набор номеров записей (ex: 42, 98, 2, 3, 9, 65535, 666) выбирать так:
Код:
SELECT ... WHERE seq IN (42, 98, 2, 3, 9, 65535, 666) ORDER BY FIND_IN_SET(seq, '42, 98, 2, 3, 9, 65535, 666');
От общего кол-ва записей ($total) скорость не зависит. Есть зависимость скорости от номера страницы (т.е. и смещения $offset). Чем дальше, тем медленней из-за того, что генерируются все предыдущие элементы перестановки. Разумно просто ввести некоторое ограничение на номер страницы (дальше 100-й, к примеру, не пускать) и всё.
 

craz

Нестандартное звание
имхо вы ищите граблей будьте проще люди потянутся

ваще есть такая возможность создать сначала рандомный список оперируя кол-вом айдишников, и на каждой странице его дергать менять можно по крону или в зависимости от времени создание этого списка замет микросекунды, хранить можно в темповой таблице или файле

Вы просто извините правда но подходите к решению задачи с точки зрения кодеров - программист решает задачу на бумажке а уж потом ее переводит в код. Еще раз извиняюсь - тема хорошая дала разминку мозгу
 

Вурдалак

Продвинутый новичок
Алгоритм очень прост. Мне нах.й не нужны люди, которые не в состоянии его понять.
 
Сверху