Como fornecer a próxima página de conteúdo atualizado?
Pergunta
Sinta-se livre para editar o título, se você sabe como formular a pergunta melhor.(Tagging é um problema bem.) O problema pode ser muito difícil, em geral, a forma e, assim, vamos considerar um exemplo concreto.
Você obtém uma tela cheia de stackoverflow perguntas solicitando /questions ?sort=newest
página.Página seguinte link leva a /questions?page=2 &sort=newest
.Eu suponho que no lado do servidor, o pedido é traduzido para uma consulta SQL com a cláusula LIMIT.Problema com esta abordagem é que, se nova pergunta foram adicionados enquanto o usuário navega na primeira página, a sua segunda página começa com algumas perguntas que ele já viu.(Se ele tem 10 perguntas por página, e 10 novas perguntas aconteceu a ser adicionado, ele vai ter exatamente o mesmo conteúdo do segundo tempo!)
Existe uma forma elegante de resolver este problema comum?Eu percebo que ele não é um grande problema, pelo menos não para o stackoverflow, mas ainda.
A melhor idéia que eu tenho (além de armazenar histórico do pedido por cliente) é usar /questions?answer_id=NNN
formato.O servidor retorna uma página que começa com o pedido de resposta, e coloca o id da primeira resposta na próxima página em página seguinte link.Deve haver uma maneira de escrever SQL para isso, certo?
É como é geralmente feito?Ou há um caminho melhor?
Solução
Isso não pode ser feito de uma maneira fácil.Por exemplo, o "sem Resposta" lista aqui no stackoverflow é classificada pelo número de votos.Então, se você gostaria de salvar o último ID da página que você está visualizando (em um cookie, a pedido, na sessão, onde quer), e alguém upvotes um post enquanto você está navegando na página 2, página 3 não está completo, pois recentemente votos positivos post poderia ter sido movido para a página 1 ou 2.
Única maneira de fazer isso é carregar a lista completa em alguém sessão.Por favor, não...
Como já mencionado, vamos esperar que as pessoas estão acostumadas a isso.
Outras dicas
A maioria dos sites que eu vi não resolver este problema - você mostra uma página, incluindo algum conteúdo que você já viu.
Você pode considerar que um recurso - quando você clicar em "next" e ver algum conteúdo que você está visto antes, é um sinal de que pretende voltar para a frente de novo, porque há alguns novos conteúdos.
Etiqueta de cada questão com o seu tempo inseridos no banco de dados, executar o momento em que o frontpage última foi carregado como um cookie ou parte do URL, e limitar a pesquisa para os itens n
através de n+displaynum
como você ir para a frente.
Mas eu não me incomoda.Esse comportamento é uniforme o suficiente para que a maioria dos usuários esperam de ti, e serve como um sinalizador para quando novos dados está se tornando disponível.Você pode até mesmo abrir uma nova aba/janela que começa no topo da lista para ver o que chegou.
Eu acredito que o SQL (MySQL) seria:
SELECT *
FROM entries
WHERE entry_id >= @last_viewed_entry_id
ORDER BY entry_id
LIMIT 50