За последние 24 часа нас посетили 24199 программистов и 1545 роботов. Сейчас ищут 1269 программистов ...

Выборка данных с разбросом повторяющихся значений поля

Тема в разделе "MySQL", создана пользователем Invision, 5 дек 2014.

  1. Invision

    Invision Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    Приходят от клиентов отзывы, чаще всего за раз один клиент может подряд по 5 отзывов за разные посылки. После публикации на странице отзывов это смотрится не очень хорошо) Как можно по полю name сделать выборку чтобы следующие 2-3 (рандомные значения) не включали данные с этим именем.

    Сортировка рандомом не проканает, на странице пагинация. Была идея предварительно после сохранения указывать на какой позиции будет комментарий и по позиции сортировать. Возможно есть вариант как то на уровне запроса sql это реализовать?

    Задача немного странная, есть идеи у кого?)
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.088
    Симпатии:
    1.240
    Адрес:
    там-сям
    У тебя сейчас сортировка по дате получения или по пользователю? Всякое бывает :)
    Это реально разные записи от одного пользователя или по каким-то причинам это одна запись показана 5 раз?

    Давай уточним. Пусть "Иван" прислал пять отзывов и так сложилось, что при нужной сортировке эти записи эти выстроились подряд. Ты хочешь
    а) показывать не более одной записи Ивана, то есть общее число записей сократится, или
    б) изобрести такую сортировку, чтобы все записи остались, только разбросаны хаотично?


    Решение (а): через группировку по имени
    Решение (б): через сортировку по полю со "случайным" значением. это значение не в момент select генерится, а хранится в таблице.
     
  3. Invision

    Invision Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    Вариант Б, кажется придется реализовывать так как я изначально думал. Проблема еще в том что сортировка по дате, но время не выводится, обычно много клиентов пишут в один день, так что в плане вывода данных должно быть все корректно... я надеюсь)

    Выводятся разные комменты одного юзера подряд.
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.088
    Симпатии:
    1.240
    Адрес:
    там-сям
    Поле даты записи содержит только дату или дата-время? И как буквально выглядит ORDER BY … сейчас?
     
  5. Invision

    Invision Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    > ORDER BY created DESC
    created - datetime field
    вывожу только m-d-Y
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.088
    Симпатии:
    1.240
    Адрес:
    там-сям
    Я подумал: сортировка по времени всё-таки самая естественная. Было бы здорово разбрасывать записи не совсем случайно, а в пределах суток, недели или другого интервала. Этого можно было бы достичь, если в "случайном" поле будет присутствовать фрагмент даты-времени.

    Типа:
    Код (Text):
    1. UPDATE xxx SET rnd_field = CONCAT(DATE_FORMAT(created, '%y-%u-'), LEFT(UUID(), 8))
    (запишется что-то вроде '2014-52-762e49fc', '2014-52-f109f176'…)

    И потом сортировать:
    Код (Text):
    1. SELECT * FROM xxx ORDER BY rnd_field DESC