Forum Clubic

[PHP/MySQL] problème d'ORDER BY [résolu]

:stuck_out_tongue:

j’ai une table contenant des années, et une entrée “Divers”
sous cette forme

Divers
2001
2002
2003

j’aimerais dans ma requete trier dans cet ordre

2003
2002
2001
Divers

j’ai testé avec “ORDER BY annee DESC”
mais cela me donne “Divers” en premier, alors que je veux l’avoir en dernier.

comment faire, avec une requete SQL ?

j’ai eu le même soucis sur une requète, et vu que j’avais pas envie de chercher, j’ai fais 2 requètes [:yeoh]

maintenant si kkn à une soluce, je prends aussi :wink:

et avec ASC, c’est pas les chiffres d’abord et ensuite les lettres ?

si mais il veut les plus grands nombres en premier; et après les nombres, il veut les strings…

En 1 seule requête, je vois vraiment pas…

Si tu n’as que des années et divers :

order by length(annee), annee desc

[Non testé]

je testerais ça merci

au temps pour moi, j’avais mal lu :jap:

Plutôt ça :

ORDER BY IF( annee REGEXP ‘^[0-9]{4}$’, 0, 1) ASC, annee ASC

(avec mySQL)

Sinon tu dois pouvoir faire le même genre de trucs avec par exemple PostGreSQL (faut que je le teste, maintenant qu’il traîne sur mon dur, et qu’il est ouvert là)

je sais pas comment marche le if sous mysql, mais
est ce que ce serait pas mieux ça ? :
(d un point de vue perf, un seul order by, et la regexp est plus simple)

ORDER BY IF( annee REGEXP ‘^[^0-9]’, 3012, annee) ASC

Non. Car le tri par année n’est pas conservé :slight_smile: là je force le trie par année (ie: ça conserve le tri 2001 … 2005), et si c’est pour tester que le premier caractère autant se servir de SUBSTRING & BETWEEN :slight_smile:

j’ai pas encore testé ton truc, mais ce que je veux moi c’est

2003
2002
2001
Divers

donc j’imagine qu’il faut juste mettre DESC au lieu de ASC

Sûrement :o

merci ça marche :wink: