Запись просмотров страниц пользователя, а затем превращение этого в полезные данные? - PullRequest
2 голосов
/ 22 октября 2009

Мой сайт регистрирует клики в базе данных каждый раз, когда пользователь просматривает статью. Эта таблица автоматически очищается каждые 3 дня. Мы используем данные для определения наиболее просматриваемых страниц за этот трехдневный период.

Я также хотел бы использовать эти данные в маркетинговых целях, например, чтобы определить, каким пользователям нравится какие разделы сайта.

Я написал скрипт на php, который делает следующее:

  • получить идентификаторы пользователя, вошедшего в систему, который просматривал статью за последние 3 дня

  • для каждого пользователя, я запрашиваю счет, сколько раз они просматривали статьи в каждом разделе, например, Бобби просмотрел 10 страниц в Food & Drink и 6 страниц в Sport. Я попытался объединить этот шаг и предыдущий, но получил странные результаты для итогов.

  • Это дает мне хороший массив в этой форме:

    [Бобби Джонс] => Массив ( [Film] => 10 [Домашняя страница] => 1 [Еда и напитки] => 2 [Здоровье и красота] => 1 [Подарки и гаджеты] => 3 )

Что я хочу получить из этих данных, так это в конечном итоге иметь таблицу, которая регистрирует данные в массиве выше, а затем, когда я выполняю свои запросы, увеличивает его.

К сожалению, это добавляет много накладных расходов. Когда у меня есть массивы, подобные приведенному выше, мне нужно выполнить другой запрос, чтобы проверить, существует ли уже эта комбинация пользователя и категории в базе данных, и если это так, я должен увеличить ее на значения этого дня. Например, если Бобби просмотрел 10 страниц фильма на прошлой неделе, а на этой неделе просмотрел 6, мне нужно ОБНОВИТЬ таблицу. Если он никогда раньше не просматривал страницу с продуктами, мне нужно вместо этого вставить.

Этот запрос возвращает около 400 пользователей, которые взаимодействовали с сайтом за последние 3 дня. Это означает, что для каждого I-пользователя мне нужно выполнить 1 запрос, чтобы получить итоги просмотра, 1 запрос, чтобы узнать, просматривали ли они эту категорию ранее, и другой запрос на обновление / вставку, в зависимости от того, просматривали ли они его или не. Вы можете видеть, насколько это неэффективно.

Кто-нибудь может предложить лучший способ сделать это? Моя конечная цель - получить таблицу, показывающую, как часто мои пользователи просматривают мои категории, поэтому я могу сказать: «показать мне всех пользователей, которым нравится еда и напитки» и т. Д.

Спасибо, Matt

Ответы [ 2 ]

1 голос
/ 22 октября 2009

Если вы используете MySQL и версия достаточно высока, посмотрите на INSERT ... ON DUPLICATE KEY UPDATE . Это должно сократить запрос.

Затем убедитесь, что ваши таблицы правильно заданы, и эти два запроса должны быть легкими.

1 голос
/ 22 октября 2009

Вы можете выполнить поведение UPDATE / INSERT, используя MySQL INSERT...ON DUPLICATE KEY UPDATE.

Вы можете комбинировать запросы SELECT и INSERT, используя MySQL INSERT...SELECT.

Если вы опубликуете более подробную информацию (скажем, схему, например), я мог бы показать вам пример запроса, объединяющего эти два метода, хотя Руководство по MySQL довольно подробно разбирается в обеих темах.

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