2010-11-01 4 views
1

Je donne les résultats suivants:Modifier la requête MySQL pour forcer un enregistrement à apparaître en premier?

"SELECT * FROM pages WHERE parent=0 ORDER BY `sort` ASC" 

Il y a un bug quelque part dans le système, je travaille avec ce qui signifie qu'une page peut avoir une valeur de tri inférieure à la page d'accueil. Je suis actuellement en train d'examiner cela, en attendant j'ai besoin de la requête pour appliquer cette page d'accueil vient en premier.

Cette requête peut-elle être adaptée pour que la première page apparaisse toujours avec un id de 1 pour apparaître en premier, puis les autres sont triés par la colonne de tri?

Répondre

1
SELECT * 
FROM pages 
ORDER BY 
     id = 1 DESC, sort 

Si vous allez appliquer une clause LIMIT à cette requête, il peut être préférable de le diviser en deux:

SELECT * 
FROM pages 
WHERE id = 1 
UNION ALL 
SELECT * 
FROM (
     SELECT * 
     FROM pages 
     WHERE parent = 0 
       AND id <> 1 
     ORDER BY 
       parent, sort 
     LIMIT 9 
     ) 

de sorte qu'un index sur (parent, sort) peut être utilisé.

+0

Merci beaucoup, cela a parfaitement fonctionné. – JasonS

0
SELECT * FROM pages WHERE parent=0 ORDER BY `id` ASC, `sort` ASC 
+0

Si 'id' est une' PRIMARY KEY', ce serait la même chose que 'ORDER BY id'. – Quassnoi

1
SELECT * FROM pages WHERE parent=0 ORDER BY IF(id = 1, -1, 0) ASC, id ASC 
Questions connexes