Sviluppo di feed di notizie in stile Facebook
-
14-11-2019 - |
Domanda
Sono davvero dispiaciuto se questa domanda è già stata posta, o rispose, ma non riesco a trovare tutto per trovare ciò di cui ho bisogno.
Ho ogni altro pezzo di questo costruito, la mia unica domanda è circondata dai commenti in linea.Mi piacerebbe fare qualcosa di simile a ciò che Facebook fa dove rendono i commenti X con un pulsante per visualizzare tutti i commenti Y.
Tuttavia, gli unici due modi in cui posso vedere di fare questo sono:
- .
- Esecuzione di una selezione nel ciclo che rende ogni oggetto (penso che chiunque possa avere una risposta a questo sarebbe d'accordo con me che questa è una decisione terribile)
- Esecuzione di una grande selezione per estrarre tutti i commenti in cui News_ID è in un determinato sottoinsieme, quindi utilizzare PHP per ITORATO su di essi, selezionare X più recente e ignorare il resto.
né uno di questi sembra una buona soluzione;Tuttavia, poiché entrambi coinvolgono un enorme spreco di risorse.
Qualcuno ha un potenziale suggerimento per l'implementazione di questo?
Soluzione
SELECT * FROM comments_table WHERE article_id = {something} LIMIT {no_of_comments_per_page} SORT BY date DESC
.
Questa è una query molto semplice ma potente per i commenti.
Codice effettivo
<?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"]}";
}
?>
. Altri suggerimenti
Utilizzerei una selezione con un limite aggiunto alla clausola, ordinando per 'ID' in ordine dec.Qualcosa come .. "Seleziona * dai commenti limite 3 desc"
Quando l'utente fa clic sul pulsante "Carica altro commenti", eseguire un certo tipo di richiesta AJAX con una query simile a .. "Seleziona * da Commenti Limit X, 3 Desc"
Farei un JOIN
e ordina i dati dopo.Qualcosa come:
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
.
Il problema delle prestazioni di avere commenti extra che sarebbe nascosto è davvero trascurabile - e non hai il sovraccarico aggiunto di creare una richiesta Ajax per caricare gli altri commenti quando fanno clic sul pulsante "Vedi tutto" - puoi soloNascondili, quindi visualizzarli all'istante.
Se volevi solo i primi 40 posti, dovresti aggiungere questa condizione alla clausola WHERE (infatti, potresti avvolgere il filtro che stai facendo anche in modo):
WHERE articles.id IN (SELECT id FROM articles ORDER by articles.date LIMIT 40)
.