Faire un tri successif en PHP

nanor21 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   -  
 Nanor 21 -
Bonjour a tous,
Je souhaite faire apparaitre des creneaux horaires dans un menu deroulant.
Ces creneaux horaires sont pris dans une base de donnees.
L'ennui c'est que ces heures sont notees en systeme americain:
ce qui fait que lorsque je demande un tri alphabetique:
je me retrouve avec : 02:00 P.M avant 11:00 A.M.
J'aimerais qu'il me fasse un premier tri en fonction de A.M puis un deuxieme en fonction P.M,
Voici mon code pour le moment,

"SELECT * FROM Matable WHERE Hour ORDER BY Hour ";

Pouvez vous m'aidez a resoudre ce probleme s'il vous plait.
A voir également:

3 réponses

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 569
 
Salut,

ton tri n'est pas alphabetique mais plutôt asciibetique.

c'est normal d'avoir 02:00 P.M avant 11:00 A.M

puisuqe 0 est avant 1 dans l'ordre asciibetique

Donc tu peux faire 2 requêtes

une pour AM
SELECT * FROM Matable WHERE Hour LIKE '%AM' ORDER BY Hour 
et une pour PM
SELECT * FROM Matable WHERE Hour LIKE '%PM' ORDER BY Hour 
lami20j
0
nanor21 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
Salut,
Je comprends bien ta methode mais l'ennui c'est que je voudrais reunir ces deux requetes dans une seule afin que ces deux requetes puissent aller dans le meme menu deroulant.
existe t il un mot de liaison en php du genre THEN (et puis) pour permettre quelque chose du genre afin que php reconnaisse l'odrdre de tri:
SELECT FROM matable WHERE Hour LIKE '%AM' ORDER BY Hour THEN SELECT FROM matable WHERE Hour LIKE '%PM' ORDER BY Hour
Mais d'un autre cote je n'ai pas pu encore esseyer ta solution du fait que je n'ai plus mon pc ce week end mais un mac(qui n'a pas les bons logiciels),donc peut etre que ta solution repond deja a ma question.
Merci pour ta reponse
0
cadavor
 
Même si ce message est vieux, j'y répond ça pourrait aider des personnes.

Il suffit de faire ceci :

SELECT * FROM matable ORDER BY Hour GROUP BY RIGHT(Hour, 3)

La fonction RIGHT(chaine, x) sélectionne les "x" caractères en partant de la droite de la chaine "chaine"
De même pour la LEFT() mais en partant de la gauche
0
Nanor 21
 
Merci
0