Desenvolvimento Facebook-Estilo Feed De Notícias
-
14-11-2019 - |
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:
- 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)
- 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?
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)