Появляются дубли при RAND() сортировке
Приветствую.
При использовании pdoPage и msProducts появляются дубли в выдаче, если сортировать RAND().
Если выводить с сортировкой ASC или DESC — то все ок, дублей нет.
Если выводить без пагинации, напрямую msProducts: все ок.
Если задать &limit=`0` — все ок.
Если задать limit больше `0` — появляются дубли.
Кол-во дублей не зависит от кол-ва страниц, указанных в limit (что 2 страницы по 100 записей, что 20 страниц по 10 записей — кол-во дублей в обоих случаях одинаково)
В выдаче количество дублей и их ид — не всегда одинаковые, при этом общее количество товаров остается неизменным, а дубли заменяют собой другие ид.
Например:
без RAND(): .....6455, 6456, 6457… (общее кол-во элементов в категории при выводе — 150)
с RAND(): .....6455, 6455, 6457… (общее кол-во элементов в категории при выводе — 150)
Сравнивал все элементы в базе — никаких отличий нет, кроме даты создания, алиаса, ид, парента и тайтла.
вызов такой:
miniShop 2.2.0-pl2
pdoTools 2.4.0-pl
php7 / modhost
При использовании pdoPage и msProducts появляются дубли в выдаче, если сортировать RAND().
Если выводить с сортировкой ASC или DESC — то все ок, дублей нет.
Если выводить без пагинации, напрямую msProducts: все ок.
Если задать &limit=`0` — все ок.
Если задать limit больше `0` — появляются дубли.
Кол-во дублей не зависит от кол-ва страниц, указанных в limit (что 2 страницы по 100 записей, что 20 страниц по 10 записей — кол-во дублей в обоих случаях одинаково)
В выдаче количество дублей и их ид — не всегда одинаковые, при этом общее количество товаров остается неизменным, а дубли заменяют собой другие ид.
Например:
без RAND(): .....6455, 6456, 6457… (общее кол-во элементов в категории при выводе — 150)
с RAND(): .....6455, 6455, 6457… (общее кол-во элементов в категории при выводе — 150)
Сравнивал все элементы в базе — никаких отличий нет, кроме даты создания, алиаса, ид, парента и тайтла.
вызов такой:
[[!pdoPage?
&element=`msProducts`
&parents=`[[*id]]`
&limit=`24`
&pageLimit=`10`
&tpl=`@INLINE [[+id]]<br />`
&sortdir=`DESC`
&cache=`1`
&cacheTime=`2600000`
&cache_user=`1`
&includeTVs=``
&showHidden=`1`
&setMeta=`0`
&scheme=`uri`
&groupby=`id`
&sortby=`RAND()`
&fastMode=`1`
]]
[[!+page.nav]]miniShop 2.2.0-pl2
pdoTools 2.4.0-pl
php7 / modhost
Комментарии: 14
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
вот с просто groupby=`id`
абсолютно идентичные ошибки с дубликатами
s5972.h2.modhost.pro/manager/
s5972
9DWqi0qYahV0
если это ошибка, то куда и как сообщить об этом?
Если ты ставишь случайную сортировку, то товары выводятся случайно. А это значит, что позиции на каждой странице могут повторять позиции на предыдущих и следующих, потому что они каждый раз тасуются заново.
1 страница — ты говоришь вывести 10 товаров в случайном порядке, начиная с нуля.
2 страница — ты говоришь вывести 10 товаров в случайном порядке, начиная с 10го.
3 страница — ты говоришь вывести 10 товаров в случайном порядке, начиная с 20го.
Вот они каждый раз и выводятся случайно, с пропуском n случайных товаров, в зависимости от номера страницы. Более того, если просто обновлять страницу с пагинацией, то вывод тоже каждый раз будет меняться.
Неужели до этого нельзя было дойти самостоятельно?
я думал, что, сначала обрабатывается весь вывод и уже потом сортируется по страницам с соответствующим отступом
как тогда можно реализовать пагинацию и случайную сортировку?
Выбрать самому все id товаров, перемешать функцией rand() и передать в pdoPage
Ну и убедиться, чтобы [[твойсниппет]] не выдавал каждый раз новые значения, а кэшировал их для текущего юзера.
То есть, ты как-бы сам указываешь свой «случайный» порядок при вызове сниппета — других вариантов не вижу.
Не могли бы Вы привести простейший пример?
Пока мой код такой:
И ещё, я не уверен, что Вы прочтёте моё сообщение, ибо теме уже более 2 лет.
Ответьте, пожалуйста, хотя бы одной фразой о прочтении.
Тут неважно, MODX или нет — логика для любой программы одинакова.
а потом выводить в pdoPage
И не работает. Или так не получится?
Получается, плейсхолдер сортируется и пишется нормально.
Почему pdoPage не принимает плейсхолдер, созданный родным братом?
В каком виде должны быть данные в плейсхолдере для pdoPage?