Разработка новостной ленты в стиле Facebook - PullRequest
4 голосов
/ 30 марта 2011

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

У меня есть все остальные части этого, мой единственный вопросокружает встроенные комментарии.Я хотел бы сделать что-то похожее на то, что делает Facebook, когда они отображают x комментариев с помощью кнопки для отображения всех y комментариев.

Однако, я могу видеть только два способа сделать это:

  1. Выполнение SELECT в цикле, который отображает каждый элемент (я думаю, что любой, у кого может быть ответ на этот вопрос, согласится со мной, что это ужасное решение)
  2. Выполнение одного большого выбора, чтобы получить все комментариигде параметр news_id находится в определенном подмножестве, а затем с помощью PHP выполняет итерацию по ним, выбирает самый последний x и игнорирует остальные.

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

У кого-нибудь есть потенциальное предложение для реализации этого?

Ответы [ 3 ]

1 голос
/ 30 марта 2011
SELECT * FROM comments_table WHERE article_id = {something} LIMIT {no_of_comments_per_page} SORT BY date DESC

Это очень простой, но мощный запрос комментариев.

Фактический код

<?php
$sql = "SELECT * FROM comments_table WHERE article_id = 24 LIMIT 40 SORT BY date DESC";
$data = mysql_query($sql);
$comments = mysql_fetch_assoc($data);
foreach($comments as $comment){
  $ct++;
  echo "ID: {$ct}";
  echo "<br />";
  echo "Comment: {$comment["comment"]} by {$comment["user"]}";
  echo "Date: {$comment["date"]}";
}
?>
0 голосов
/ 17 апреля 2011

Я бы сделал JOIN и отсортировал бы данные после. Что-то вроде:

SELECT articles.id, articles.text, articles.date, 
       comments.id, comments.text, comments.date
FROM articles LEFT JOIN comments ON (comments.article_id = articles.id)
WHERE {some criteria} ORDER BY articles.date, comments.date

Проблема производительности с наличием дополнительных комментариев, которые были бы скрыты, на самом деле незначительна - и у вас нет дополнительных накладных расходов при создании ajax-запроса для загрузки других комментариев, когда они нажимают эту кнопку «увидеть все» - вы можете просто скрыть их, а затем отобразить их мгновенно.

Если вы хотите получить только 40 лучших постов, вам нужно добавить это условие в предложение where (на самом деле вы также можете обернуть любую фильтрацию, в которой вы работаете):

WHERE articles.id IN (SELECT id FROM articles ORDER by articles.date LIMIT 40)
0 голосов
/ 30 марта 2011

Я бы использовал SELECT с LIMIT, добавленным к предложению, упорядочивая по 'id' в порядке DESC. Что-то вроде .. "ВЫБРАТЬ * ИЗ КОММЕНТАРИЙ LIMIT 3 DESC"

Когда пользователь нажимает кнопку «загрузить дополнительные комментарии», выполните некоторый тип запроса AJAX с запросом, похожим на .. «SELECT * FROM comments LIMIT X, 3 DESC»

...