Как реализовать случайный вывод из БД, с учетом рейтинга данных.

Тема в разделе "PHP", создана пользователем dandandan, 11 дек 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    990
    Симпатии:
    266
    Необходимо выводить случайные данные поговорок из базы данных с учетом, рейтинга поговорок. Т.е. поговорки с более высоким рейтингом показываются чаще, чем с более низким. Может кто идейку подсказет, как такое реализовать. Просто случайные данные выбрать из БД могу запросто.
     
  2. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    ORDER BY поле DESC
    Хотя в принципе не понятно как может быть выборка случайной если необходимо учитывать какое-либо поле.
     
  3. Ceyce

    Ceyce Постоялец

    Регистр.:
    3 ноя 2008
    Сообщения:
    52
    Симпатии:
    51
    Думаю подразумевалось, что чем выше значение в поле, тем больше у него шанс выпасть.
    Можно реализовать к примеру таким образом:
    ORDER BY RAND()*поле DESC

    Но если поговорок много, то думаю будет лучше достать все, и из них уже выбрать нужное количество.
     
  4. DIAgen

    DIAgen Постоялец

    Регистр.:
    30 окт 2006
    Сообщения:
    134
    Симпатии:
    72
    Если мало записей в базе данных то будет работать быстро, а если больше 1к, то будет грузить сервак.

    P.S. пока писал ответ, уже ответили :)
     
  5. puzer

    puzer Создатель

    Регистр.:
    5 июл 2008
    Сообщения:
    14
    Симпатии:
    4
    select c1
    from t1
    where rating>FUNC(rand())*(rating_max-rating_min)
    order by rating
    limit 1

    FUNC - подбери по вкусу, чтобы было не линейно.;)
     
  6. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    990
    Симпатии:
    266
    Вот меня именно FUNC интересует .
    Например, если рейтинг рассчитывается по 5-ти бальной шкале от 1 до 5. Нужно поговорку с рейтингом 1 показать 1 раз, с рейтином 2 - 2 раза, ... с рейтингом 5 - 5 раз.

    Можно реализовать к примеру таким образом:
    ORDER BY RAND()*поле DESC
    Не совсем понимаю как это будет работать. Т.е. Упорядочивает сначала случайно и выбирает по возрастанию ?
     
  7. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Ещё раз, только по русски и подробно.
    Если я правильно понял, то чего хочешь ты мускулем не решить.
     
  8. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    990
    Симпатии:
    266
    Т.е. нужно показывать случайную поговорку. Однако поговорка с более высоким рейтингом должна показываться чаще. чем поговорка с низким рейтингом. (Рейтинг выставляется голосованием) На странице показывается 1 поговорка за один раз.
    Что-то вроде аналога рекламы от яндекса. Если чаще кликают на объявление - то чаще показывается это объявление.
     
  9. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Мускуль отдал тебе запрос и забыл - он не запоминает их.
    Так-что учёт чаще/реже надо вести самому.
     
  10. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    990
    Симпатии:
    266
    проблема в том, что пока в голову не приходит такой алгоритм. :) Уже третий день думаю.
    Получается, все сложно... в БД добавляю поле сколько раз показана поговорка... И необходимо каждый раз выполнять вычисления...
     
Статус темы:
Закрыта.