2009-02-06 4 views
0

J'essaye de faire une pagination de base dans MSSQL. Le problème que j'ai est que je suis en train de trier la pagination sur une ligne qui (potentiellement) a des valeurs similaires, et la clause ORDER BY renvoie des résultats "aléatoires", ce qui ne fonctionne pas bien.MSSQL Paging retourne des lignes aléatoires lorsqu'il n'est pas supposé trop

Par exemple. Si j'ai trois lignes, et que je les classe par "classement", et que toutes les évaluations sont = '5' - les rangées se commanderont elles-mêmes "aléatoirement". Comment puis-je faire en sorte que les lignes apparaissent dans le même ordre à chaque fois?

J'ai essayé de le trier par date et heure que le champ a été modifié pour la dernière fois, mais le "classement" est trié en sens inverse, et encore une fois, ne fonctionne pas comme prévu.

Voici le SQL que j'utilise jusqu'à maintenant. Je sais que c'est un peu confus sans les données, donc toute aide serait utile.

SELECT * FROM 
(
    SELECT 
    CAST(grg.defaultthumbid AS VARCHAR) + '_' + 
    CAST(grg.garageid AS VARCHAR) AS imagename, 
    (
     SELECT COUNT(imageid) 
     FROM dbo.images im (nolock) 
     WHERE im.garageid = grg.garageid 
    ) AS piccount, 
    (
     SELECT COUNT(commentid) 
     FROM dbo.comments cmt (nolock) 
     WHERE cmt.garageid = grg.garageid 
    ) AS commentcount, 
    grg.GarageID, mk.make, mdl.model, grg.year, 
    typ.type, usr.username, grg.content, 
    grg.rating, grg.DateEdit as DateEdit, 
    ROW_NUMBER() OVER (ORDER BY Rating DESC) As RowIndex 
    FROM 
    dbo.garage grg (nolock) 
    LEFT JOIN dbo.users (nolock) AS usr ON (grg.userid = usr.userid) 
    LEFT JOIN dbo.make (nolock) AS mk ON (grg.makeid = mk.makeid) 
    LEFT JOIN dbo.type (nolock) AS typ ON (typ.typeid = mk.typeid) 
    LEFT JOIN dbo.model (nolock) AS mdl ON (grg.modelid = mdl.modelid) 
    WHERE 
    typ.type = 'Automobile' AND 
    grg.defaultthumbid != 0 AND 
    usr.username IS NOT NULL 
) As QueryResults 
WHERE 
    RowIndex BETWEEN (2 - 1) * 25 + 2 AND 2 * 25 
ORDER BY 
    DateEdit DESC 
+0

Et aussi, je ne sais pas why..if je prends le « grg.content » de la sélection, il semble fonctionner comme je le veux aussi .. – footose

Répondre

3

Essayez de commander à la fois, .: par exemple Classez par DESC, DateEdit ASC

+0

Merci! Je n'ai aucune idée pourquoi je n'ai pas essayé cela en premier lieu. À votre santé. – footose

1

La requête premiers chiffres les lignes par [Note], puis re-trie les résultats par [DateEdit]. Peut-être pas ce que vous vouliez. En commandant par [RowIndex] ASC devrait le trier.

ROW_NUMBER() OVER (ORDER BY [Rating] DESC) As [RowIndex] 
... 
ORDER BY [RowIndex] 
+0

J'ai essayé de commander par RowIndex mais cela ne fonctionnait pas. Je vais donner un autre coup de feu. – footose

Questions connexes