Comment sélectionner "précédent" et "suivant" enregistrements dans SQL?
Je suis la construction d'un blog-post de la page de détail sur mon site qui affiche afficher une "précédente " et " prochaine lien semblable à celui d'un post de blog typepad œuvres. Voir l'exemple ci-dessous.
Je me demandais si il existe un moyen d'interroger la base de données qui accomplit quelque chose comme l'image ci-dessous où il sélectionne l'enregistrement (en jaune) pour l'affichage, mais aussi sélectionne les enregistrements suivants et précédents (en vert) lorsque triés par PublishDate.
Aussi, pour plus de précisions, la table de base de données, je travaille avec a unique de publier les dates. Désolé que l'image montre un exemple de plusieurs enregistrements avec le même PublishDate.
vous êtes correct. Ma question est double. Je suis vraiment très heureux que vous avez trouvé que! Je n'ai pas pu alors j'ai demandé à la question ci-dessus. Je viens de voter pour fermer cette réponse.
Pas de problème. Je suis en train de faire la même chose, si via Entity Framework (stackoverflow.com/questions/5382023/...). Il est utile de lier ces questions ensemble pour les gens à évaluer un éventail d'options.
OriginalL'auteur jessegavin | 2010-05-10
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas. SQL n'a pas de précédent, suivant le concept. En gros, vous demandez pour le prochain top 1 dans un ensemble ordonné de requête (par date, par exemple), après celui que vous avez déjà. Cela signifie que vous devez avoir /imposte d'une commande (par la commande par l'énoncé) pour le filtrage.
Dans la question que j'ai déclaré que j'étais déjà trier les enregistrements par un unique PublishDate. Je veux savoir si il est possible de faire 1 aller-retour pour SQL server pour sélectionner un enregistrement par ID ainsi que les dossiers "avant" et "après", quand triés.
La réponse est non, alors.
vous le faire en un seul voyage à la DB si vous utilisez une UNION de joindre les deux requêtes avec les mêmes colonnes.
OriginalL'auteur TomTom
Vous avez besoin d'un moyen de commande de l'postes. Si vous avez, alors vous pourriez faire quelque chose comme ce qui suit dans SQL Server 2005+ où vous avez passé le numéro de l'élément que vous souhaitez:
Dans le code du site, vous avez besoin de garder une trace de ce numéro qui vous a été actuellement sur et soustrayez ensuite l'une et de l'actualiser pour obtenir la précédente ou ajoutez-en un et de l'actualiser pour obtenir la prochaine.
Si vous voulais le suivant et précédent avec le courant dans une seule requête, alors vous pourriez faire quelque chose comme:
abc.com/post.aspx?id={guid}
et puis disons un utilisateur arrivés à cette page de résultats sur Google, alors comment pourrais-je trouver le @ItemNumber?Vous imposer une séquence/afin d'avoir une notion de précédent et suivant. Si vous permettre à un utilisateur d'appuyer sur une page en fonction d'une pièce d'identité, vous devez disposer d'un moyen de déterminer où dans l'ordre que l'élément réside, et pour ce faire, vous devez imposer que la séquence de vous-même en utilisant quelque chose comme ROW_NUMBER(). Google ne le permettent pas. Il n'existe aucun moyen d'un lien simple pour déterminer qu'un lien apparaîtra sur la page X, si l'utilisateur recherche "Foo". Vous devez déterminer ce que manuellement que Google utilise simplement un compte de résultats et un numéro de départ pour afficher ses résultats.
Juste pour clarifier, je n'étais pas suggérer que je voudrais compter sur Google pour gérer un registre d'index ou de quoi que ce soit. Je l'ai mentionné Google comme un possible référent à partir duquel un utilisateur peut aboutir à un particulier page de mon site. - Je suppose que mon problème vient que je ne veux pas avoir à d'abord exécuter une requête pour déterminer la @ItemNumber pour un guid pour que je puisse exécuter la deuxième requête à l'aide de la syntaxe indiquée ci-dessus. - Je vous remercie pour votre réponse. +1
OriginalL'auteur Thomas
Consultez la suite de l'article sur microsoft tech net
http://social.technet.microsoft.com/wiki/contents/articles/23811.paging-a-query-with-sql-server.aspx
Espérons que cette aide
OriginalL'auteur Namit