Развитие новостей в стиле Facebook
-
14-11-2019 - |
Вопрос
Мне очень жаль, если этот вопрос уже спросил или ответил, но я не могу, кажется, не могу найти то, что мне нужно.
У меня есть все остальные части этого, мой единственный вопрос окружающий встроенные комментарии.Я хотел бы сделать что-то похожее на то, что делает Facebook, где они представляют x комментариев с кнопкой, чтобы отобразить все комментарии Y.
Однако только два способа видеть это:
- Выполнение выбора в цикле, который делает каждый элемент (я думаю, что любой, кто может иметь ответ на это, согласится со мной, что это ужасное решение)
- Выполнение одного большого выбора, чтобы потянуть все комментарии, где News_ID находится в определенном подмножестве, а затем используйте PHP, чтобы повторить их, выберите X Самые последние и игнорируйте остальные.
ни один из них кажется хорошим решением;Однако, поскольку они оба включают в себя огромную трату ресурсов.
У кого-нибудь есть потенциальное предложение для реализации этого?
Решение
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"]}";
}
?>
. Другие советы
Я бы использовал выбор с добавлением пределов в предложение, заказывая с помощью «ID» в порядке DESC.Что-то вроде .. "Выбрать * от предела комментариев 3 desc"
Когда пользователь нажимает кнопку «Загрузить больше комментариев», выполните тип запроса AJAX с помощью запроса, похожими на .. «Выбрать * из пределе комментариев x, 3 desc»
Я бы сделал генеракодицетагкод и сортировать данные после.Что-то вроде:
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)
.