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:

    .
  1. 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)
  2. 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?

È stato utile?

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)
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top