MySQL - создание алгоритма SQL для определения случайного «популярного» контента - PullRequest
0 голосов
/ 04 апреля 2011

Я хочу создать SQL-запрос (в MySQL), который будет отображать 6 случайных, но популярных записей в моем веб-приложении.

В моей базе данных есть следующие таблицы:

  • Избранное
  • материалы
  • submissions_tags
  • 1012 * метки *
  • Пользователи

    1. submissions_tags и tags - это таблицы перекрестных ссылок, которые дают каждому представлению определенное количество тегов.
    2. submissions содержит логические featured, int downloads и int views, все три из которых я хотел бы использовать для взвешивания этого запроса.
    3. Таблица favorites снова является таблицей перекрестных ссылок с полями submission_id и user_id. Подсчет количества раз, когда каждая заявка была одобрена, было бы хорошо, чтобы взвесить результаты.

Итак, в основном я хочу выбрать 6 случайных строк, взвешенных по этим четырем переменным - featured, downloads, views, и favorite count. Каждый раз, когда пользователь обновляет страницу, я хочу выбрать новую случайную цифру 6. Так что, возможно, запрос мог бы ограничить его 12 самыми последними, но показать только 6 случайных результатов. Это разумная идея с точки зрения обработки и т. Д.?

Итак, мой вопрос: как мне написать этот запрос? С чего мне начать? Я использую PHP / CodeIgniter для управления этим сайтом. Можно ли получить весь лот за один запрос, или мне придется использовать несколько запросов для этого? Или мне нужно упростить мои идеи?

Спасибо

Jack

Ответы [ 2 ]

2 голосов
/ 04 апреля 2011

Я реализовал нечто похожее на это раньше.Я выбрал способ запуска сценария на сервере каждые XX минут, чтобы заполнить таблицу пулом элементов (скажем, 20-30 элементов).Тогда запрос для использования в вашем приложении будет случайным образом выбирать 5 или около того из этой таблицы.

Просто нужно настроить алгоритм для выбора этих 20-30 элементов.@ Emmerman's аналогичен тому, что я использовал ранее для вычисления popularity_number, где я взял веса нескольких ассоциаций для элемента (views, downloads и т. Д.), Чтобы получить общее число.Мы также использовали age, чтобы обеспечить актуальность пула товаров.Вы должны будете со временем поработать с алгоритмом, чтобы убедиться, что соответствующие пункты заполнены.

1 голос
/ 04 апреля 2011

Идея состоит в том, чтобы вычислить некоторые popularity, например, для

popularity = featured*W1 + downloads*W2 + views*W3 + fcount*W4

, где W1-W4 - постоянные веса.

Затем добавить несколько случайныхчисло по популярности и сортировать по нему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...