Приходят от клиентов отзывы, чаще всего за раз один клиент может подряд по 5 отзывов за разные посылки. После публикации на странице отзывов это смотрится не очень хорошо) Как можно по полю name сделать выборку чтобы следующие 2-3 (рандомные значения) не включали данные с этим именем. Сортировка рандомом не проканает, на странице пагинация. Была идея предварительно после сохранения указывать на какой позиции будет комментарий и по позиции сортировать. Возможно есть вариант как то на уровне запроса sql это реализовать? Задача немного странная, есть идеи у кого?)
У тебя сейчас сортировка по дате получения или по пользователю? Всякое бывает Это реально разные записи от одного пользователя или по каким-то причинам это одна запись показана 5 раз? Давай уточним. Пусть "Иван" прислал пять отзывов и так сложилось, что при нужной сортировке эти записи эти выстроились подряд. Ты хочешь а) показывать не более одной записи Ивана, то есть общее число записей сократится, или б) изобрести такую сортировку, чтобы все записи остались, только разбросаны хаотично? Решение (а): через группировку по имени Решение (б): через сортировку по полю со "случайным" значением. это значение не в момент select генерится, а хранится в таблице.
Вариант Б, кажется придется реализовывать так как я изначально думал. Проблема еще в том что сортировка по дате, но время не выводится, обычно много клиентов пишут в один день, так что в плане вывода данных должно быть все корректно... я надеюсь) Выводятся разные комменты одного юзера подряд.
Я подумал: сортировка по времени всё-таки самая естественная. Было бы здорово разбрасывать записи не совсем случайно, а в пределах суток, недели или другого интервала. Этого можно было бы достичь, если в "случайном" поле будет присутствовать фрагмент даты-времени. Типа: Код (Text): UPDATE xxx SET rnd_field = CONCAT(DATE_FORMAT(created, '%y-%u-'), LEFT(UUID(), 8)) (запишется что-то вроде '2014-52-762e49fc', '2014-52-f109f176'…) И потом сортировать: Код (Text): SELECT * FROM xxx ORDER BY rnd_field DESC