Выборка случайных записей RAND(), но с определенным распределением
Всем привет!
А вот такую штуку ни не делал?
Допустим, есть 100 записей в базе, с полем дата, от 2010 до 2019 года.
Мне нужно вывести 10 случайных из них, но так, чтобы у свежих записей был приоритет, их должно быть больше, особенно в начале этой выборки.
К примеру я должен получить записи за 2018, 2019, 2016, 2012, 2019, 2017, 2014, 2015, 2016, 2010 года.
С одной стороны хочу показать случайные записи, а с другой, не хочу показывать старые, особенно в первой половине выборки.
В голову приходит только сделать штуки 3 случайные выборки за 2019-2017, 2016-2014, 2014-2010 года и объединить их.
А вот такую штуку ни не делал?
Допустим, есть 100 записей в базе, с полем дата, от 2010 до 2019 года.
Мне нужно вывести 10 случайных из них, но так, чтобы у свежих записей был приоритет, их должно быть больше, особенно в начале этой выборки.
К примеру я должен получить записи за 2018, 2019, 2016, 2012, 2019, 2017, 2014, 2015, 2016, 2010 года.
С одной стороны хочу показать случайные записи, а с другой, не хочу показывать старые, особенно в первой половине выборки.
В голову приходит только сделать штуки 3 случайные выборки за 2019-2017, 2016-2014, 2014-2010 года и объединить их.
Комментарии: 5
А нельзя написать небольшой сниппет, который выводит рандомные числа из количества дочерних ресурсов, его результат работы поместить куда нибудь в element/parent? А сортировку уже написать не rand(), а {«publishedon»:«ASC»} какую надо?
Да вот и не знаю, какую сортировку писать…
Даже сформулировать тяжело. Вероятнее всего да, нужно самому сформировать список id Объектов, а потом уже их сами и выбирать через pdoResources или что удобнее.
Даже сформулировать тяжело. Вероятнее всего да, нужно самому сформировать список id Объектов, а потом уже их сами и выбирать через pdoResources или что удобнее.
Вот что похожее надо, мне кажется
[[!pdoResources?
&parents=`0`
&resources=`[[!pdoResources? &sortby=`RAND()` limit=`10`&returnIds=`1`]]`
&limit=`10`
&sortby=`{«publishedon»:«ASC»}`
]]
Да… примерно…
Спасибо. Хотя здесь может быть ситуация, когда свежий записей в выборке не будет…
Спасибо. Хотя здесь может быть ситуация, когда свежий записей в выборке не будет…
Свежей записи это какую то надо закрепить?
Можно вот так закрепить вот так
Можно вот так закрепить вот так
&resources=`11, 12, 13, [[!pdoResources? &sortby=`RAND()` limit=`10`&returnIds=`1`]]`
Или сделать еще один запрос сюда, но, дописать sortby по дате публикации, напр. и выводить 2 самые свежие, или отобрать через where рандомные, но опубликованные в этом году&resources=`[[!pdoResources? &sortby=`{"publishedon":"ASC"}` limit=`2`&returnIds=`1`]],[[!pdoResources? &sortby=`RAND()` limit=`10`&returnIds=`1`]]`
Конечно, лучше все это дело вынести в свой сниппет и сделать всю эту выборку одним getCollection, я думаю. Но выводить нужно набор id и их уже сортировать, иначе вряд ли получится
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.