Pregunta

Lo siento mucho si esta pregunta ya se ha formulado o respondido, pero parece que no puedo encontrar lo que necesito.

He construido todas las demás piezas de esto, mi única pregunta es sobre los comentarios en línea.Me gustaría hacer algo similar a lo que hace Facebook, donde muestran x comentarios con un botón para mostrar todos los y comentarios.

Sin embargo, las únicas dos formas que veo de hacer esto son:

  1. Realizar un SELECT en el bucle que representa cada elemento (creo que cualquiera que pueda tener una respuesta a esto estaría de acuerdo conmigo en que es una decisión terrible)
  2. Realizar una selección grande para extraer todos los comentarios donde news_id está en un subconjunto determinado y luego usar PHP para iterar sobre ellos, seleccionar la x más reciente e ignorar el resto.

Ninguna de ellas parece una buena solución;sin embargo, ambos implican un enorme desperdicio de recursos.

¿Alguien tiene alguna sugerencia potencial para implementar esto?

¿Fue útil?

Solución

SELECT * FROM comments_table WHERE article_id = {something} LIMIT {no_of_comments_per_page} SORT BY date DESC

Esta es una consulta muy simple pero poderosa para los comentarios.

código real

<?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"]}";
}
?>

Otros consejos

Yo usaría un selecto con un límite agregado a la cláusula, ordenando por 'ID' en orden de DESC.Algo como .. "Seleccionar * de Comentarios Límite 3 DESC"

Cuando el usuario hace clic en el botón "Cargar más comentarios", realice algún tipo de solicitud AJAX con una consulta similar a ... "Seleccione * del límite de comentarios x, 3 DESC"

yo haría un JOIN, y ordenar los datos después.Algo como:

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

El problema de rendimiento de tener comentarios adicionales que estarían ocultos es realmente insignificante, y no tiene la sobrecarga adicional de realizar una solicitud ajax para cargar los otros comentarios cuando hacen clic en el botón 'ver todo'; puede simplemente ocultarlos. y luego mostrarlos al instante.

Si solo quisieras las 40 publicaciones principales, tendrías que agregar esta condición a la cláusula donde (de hecho, también podrías ajustar cualquier filtrado que estés haciendo):

WHERE articles.id IN (SELECT id FROM articles ORDER by articles.date LIMIT 40)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top