2008-09-02 9 views
3

N'hésitez pas à modifier le titre si vous savez mieux formuler la question. (L'étiquetage est également un problème.) Le problème peut être trop difficile dans cette forme générale, alors considérons un exemple concret.Comment fournir la page suivante du contenu mis à jour?

Vous obtenez une liste de questions stackoverflow en demandant /questions ?sort=newest page. Le lien suivant mène à /questions?page=2 &sort=newest. Je suppose que côté serveur, la requête est traduite en une requête SQL avec une clause LIMIT. Le problème avec cette approche est que si une nouvelle question est ajoutée pendant que l'utilisateur parcourt la première page, sa deuxième page commencera par quelques questions qu'il a déjà vues. (S'il a 10 questions par page et que 10 nouvelles questions ont été ajoutées, il recevra exactement le même contenu la deuxième fois!)

Y at-il une façon élégante de résoudre ce problème commun? Je me rends compte que ce n'est pas un gros problème, du moins pas pour stackoverflow, mais quand même.

La meilleure idée que j'ai (en dehors de stocker l'historique des demandes par client) est d'utiliser le format /questions?answer_id=NNN. Le serveur renvoie une page qui commence par la réponse demandée et place l'identifiant de la première réponse sur la page suivante dans le lien de la page suivante. Il doit y avoir un moyen d'écrire SQL pour ça, non?

Est-ce que c'est comme ça que ça se passe habituellement? Ou il y a un meilleur moyen?

+0

J'aime votre solution suggérée. Je n'ai rien vu pour le battre (et je ne vois rien de mieux non plus). :) Je vais essayer le SQL ci-dessous. –

Répondre

1

Cela ne peut être fait un moyen facile. Par exemple, la liste "Unanswered" ici à stackoverflow est triée par nombre de votes. Donc, si vous sauvegardiez le dernier identifiant de la page que vous consultez (dans un cookie, une requête, une session, etc.) et que quelqu'un annule un message pendant que vous naviguez sur la page 2, la page 3 n'est pas complète depuis la dernière mise à jour. Le poste aurait pu être déplacé vers la page 1 ou 2.

La seule façon de le faire est de charger la liste complète dans une session de quelqu'un. S'il vous plaît ne pas ...

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

+0

totalement d'accord. de plus, si vous avez tellement de résultats, il est préférable d'utiliser un rapport ou de meilleures options de filtrage pour les recherches. Si vous avez plus d'une page de sortie Web pertinente, la mise en page a probablement besoin d'un refactor –

0

La plupart des sites Web que j'ai vus ne résolvent pas ce problème - ils vous montrent une page incluant du contenu que vous avez déjà vu.

Vous pourriez considérer qu'une fonctionnalité - lorsque vous cliquez sur "suivant" et que vous voyez du contenu que vous avez déjà vu, c'est un signal que vous voulez retourner à l'avant parce qu'il y a du nouveau contenu.

0

Tag chaque question avec son temps entré dans la base de données, portent le temps le dernier chargement frontpage comme un cookie ou d'une partie de l'URL, et limiter la recherche aux articles n par n+displaynum que vous avancez.

Mais je ne voudrais pas déranger. Ce comportement est suffisamment uniforme pour que la plupart des utilisateurs s'y attendent, et il sert de drapeau lorsque de nouvelles données sont disponibles. Vous pouvez même ouvrir un nouvel onglet/fenêtre qui commence en haut de la liste pour voir ce qui s'est passé.

0

je crois serait le SQL (pour MySQL):

SELECT * 
FROM entries 
WHERE entry_id >= @last_viewed_entry_id 
ORDER BY entry_id 
LIMIT 50 
Questions connexes