Pergunta

Eu estou muito triste se esta questão já foi perguntado, ou respondia, mas eu não consigo encontrar o que eu preciso.

Eu tenho todas as outras peças deste construído, a minha única dúvida é em torno comentários inline.Eu gostaria de fazer algo semelhante ao que Facebook não onde eles render x comentários com um botão para exibir todos os y comentários.

No entanto, apenas duas maneiras de ver, de fazer isso são:

  1. Executar um SELECT no circuito que compõe cada item (eu acho que qualquer um que pode ter uma resposta para isso teria de concordar comigo que essa é uma decisão terrível)
  2. Realizando uma grande escolha para puxar todos os comentários onde news_id está em um determinado subconjunto e, em seguida, usar o PHP para iterar sobre eles, seleccione a x mais recentes, e ignorar o resto.

Nem um desses parece uma boa solução;no entanto, como ambos envolvem um enorme desperdício de recursos.

Alguém tem um potencial de sugestão para a execução do presente?

Foi útil?

Solução

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

Este é um muito simples, mas poderosa de consulta para os comentários.

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

Outras dicas

Eu usaria um seleto com um limite adicionado à cláusula, pedindo por 'ID' em ordem descendente.Algo como .. "Selecione * Do limite de comentários 3 desc"

Quando o usuário clica no botão "Carregar mais comentários", execute algum tipo de solicitação de Ajax com uma consulta semelhante ao .. "Selecione * Do limite de comentários x, 3 desc"

Gostaria de fazer um JOIN, e classificar os dados depois.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

O problema de desempenho de ter extra comentários de que estaria oculto é realmente insignificante - e você não tem a sobrecarga adicionada de fazer uma requisição ajax para carregar os outros comentários quando eles clicarem em que "ver todos" botão - você pode apenas ocultá-los e, em seguida, exibi-las instantaneamente.

Se você quis só o top 40 posts, você teria que adicionar essa condição à cláusula where (na verdade, você poderia embrulhar tudo de filtragem que você está fazendo bem):

WHERE articles.id IN (SELECT id FROM articles ORDER by articles.date LIMIT 40)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top