Найти наиболее комментируемые сообщения - PullRequest
0 голосов
/ 16 декабря 2009

У меня есть блог, и я хотел бы найти лучший способ найти наиболее комментируемые посты. У меня прямая настройка с постами, есть много комментариев, и комментарии принадлежат постам.

Я пытаюсь найти 1 строку "правильный путь", чтобы сделать это, но не могу найти это. Я хотел бы получить топ-10 комментариев.

Спасибо

Ответы [ 4 ]

3 голосов
/ 16 декабря 2009

CakePHP имеет counterCache функциональность для этой конкретной цели.

Убедитесь, что ваша таблица сообщений содержит поле 'comment_count'.

Затем добавьте ключ counterCache в настройки модели Comment для публикации.

// app/models/comment.php
var $belongsTo = array(
  'Post' => array(
    'counterCache' => true
  )
);

CakePHP теперь будет автоматически увеличивать / уменьшать поле Post.comment_count при каждом добавлении или удалении комментария, принадлежащего этому сообщению.

Чтобы получить 10 самых комментируемых сообщений:

// app/models/post.php
function getTopCommentedPosts($limit = 10) {
  return $this->find('all', array(
    'order' => 'Post.comment_count DESC',
    'limit' => $limit
  ));
}

Затем вызовите этот метод из любого действия контроллера, для которого требуются эти данные. Если из контроллера, отличного от PostsController, используйте:

$this->set('posts', ClassRegistry::init('Post')->getTopCommentedPosts());
1 голос
/ 16 декабря 2009

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

Тогда просто используйте

SELECT TOP 10 FROM Post ORDER BY CommentNumber DESC
0 голосов
/ 16 декабря 2009

Я бы смешал два подхода, в основном, потому что я не знаю ваших ограничений или ваших основных проблем. Будут работать решения Адамса или Морану, хотя и по-другому.

Если у вас большая БД, а производительность - это проблема, вы должны выбрать первый подход. Вам потребуется увеличивать это число каждый раз, когда добавляется новый комментарий. В качестве альтернативы, если вашему сайту не требуется, чтобы эта топ-10 часто обновлялась, вы можете просто кэшировать свой фид «Топ-10 комментариев».

Мое предложение: если слишком трудно увеличить поле CommentNumber (устаревший код и т. Д.), Вы можете запустить почасовой / ежедневный скрипт для обновления этого номера для вас, выполнив второй запрос. Вероятно, я бы посоветовал вам выбирать эти варианты, так как они соответствуют вашим требованиям.

0 голосов
/ 16 декабря 2009

Если CakePHP позволит вам использовать прямые запросы SQL:

SELECT
  POST.POST_ID
  COUNT(*)
FROM
  POST_TABLE POST
  INNER JOIN COMMENT_TABLE COMMENT ON COMMENT.POST_ID = POST.POST_ID
GROUP BY POST.POST_ID
ORDER BY COUNT(*)

должно сработать, и, вероятно, будет весьма эффективным.

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