Question

N'hésitez pas à modifier le titre si vous savez comment formuler la question mieux.(Marquage est également un problème.) Le problème est peut-être trop difficile dans cette forme générale, donc, nous allons considérer un exemple concret.

Vous obtenez un écran de stackoverflow questions en demandant /questions ?sort=newest page.Page suivante lien mène à /questions?page=2 &sort=newest.Je suppose qu'à côté serveur, la demande est traduite dans une requête SQL avec la clause LIMIT.Le problème avec cette approche est que si une nouvelle question a été ajoutée pendant que l'utilisateur navigue sur la première page, son deuxième page va commencer avec quelques questions auxquelles il a déjà vu.(Si il en a 10 question par page, et 10 nouvelles questions qui est arrivé à être ajouté, il va avoir exactement le même contenu deuxième fois!)

Est-il une manière élégante de résoudre ce problème commun?Je me rends compte qu'il n'est pas un gros problème, du moins pas pour stackoverflow, mais tout de même.

La meilleure idée que j'ai (à l'exception de l'entreposage à la demande de l'historique par client) est à utiliser /questions?answer_id=NNN format.Le serveur renvoie une page qui commence par la demande de réponse, et met l'id de la première réponse sur la page suivante en suivant un lien de page.Il doit y avoir une façon d'écrire de SQL pour ça, non?

Est-ce la façon dont il fait d'habitude?Ou il ya une meilleure façon?

Était-ce utile?

La solution

Cela ne peut être fait d'une manière facile.Par exemple, les "sans Réponse" liste ici à stackoverflow est trié par nombre de votes.Donc, si vous voulez sauver le dernier ID de la page que vous consultez (dans un cookie, request, session, où) et que quelqu'un upvotes un post pendant que vous naviguez de page 2, page 3 n'est pas complète, puisque récemment upvoted post aurait pu être déplacé à la page 1 ou 2.

Seule façon de le faire est de charger la liste complète de quelqu'un à la session.Merci de ne pas...

Comme déjà mentionné, espérons que les gens sont habitués à cela maintenant.

Autres conseils

La plupart des sites web que j'ai vu ne permettent pas de résoudre ce problème - ils de vous montrer une page, y compris certains contenus que vous avez déjà vu.

Vous pourriez envisager une fonctionnalité lorsque vous cliquez sur "suivant" et de voir une partie du contenu que vous avez vu avant, c'est un signal que vous souhaitez revenir à l'avant à nouveau, car il y a un nouveau contenu.

Étiquette chaque question avec son temps, est entré dans la base de données, effectuer l'époque frontpage dernier était chargé comme un témoin ou d'une partie de l'URL, et de limiter la recherche aux objets n par le biais de n+displaynum comme vous aller de l'avant.

Mais je ne voudrais pas ennuyer.Ce comportement est assez uniforme que la plupart des utilisateurs de l'attendre, et il sert comme un drapeau pour lorsque de nouvelles données deviennent disponibles.Vous pouvez même ouvrir un nouvel onglet/fenêtre qui commence à revenir en haut de la liste pour voir ce qui est venu jusqu'à.

Je crois que le SQL (MySQL) serait:

SELECT * 
FROM   entries 
WHERE  entry_id >= @last_viewed_entry_id 
ORDER BY entry_id 
LIMIT 50
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top