Tri alphanumerique

Résolu/Fermé
ziad251 Messages postés 34 Date d'inscription mardi 6 mai 2008 Statut Membre Dernière intervention 23 mai 2008 - 14 mai 2008 à 11:12
 Viny33 - 9 janv. 2015 à 09:39
Bonjour,

jai un ptt prob , je veux trier une colonne de ma requete sql , elle est de genre (1/2008, 2/2008 ,.... ,11/2008,12/2008)

avec order by jai 1/2008 - 11/2008 - 2/2008 , c qui nest pas evident biensur , si qq un a une solution merci

10 réponses

ziad251 Messages postés 34 Date d'inscription mardi 6 mai 2008 Statut Membre Dernière intervention 23 mai 2008 3
14 mai 2008 à 11:28
??????????? jai rien pigé la
3
ziad251 Messages postés 34 Date d'inscription mardi 6 mai 2008 Statut Membre Dernière intervention 23 mai 2008 3
14 mai 2008 à 11:24
ce n est pas une date c est un code , les requete sont sous php mysql
1
alexdelareunion Messages postés 545 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 9 octobre 2023 142
14 mai 2008 à 16:45
Pas de soucis,
Quand tu envoie une réponse finale, n'oublie pas de cocher la case 'problème résolu' en bas de la zone de message !
a+
1
salut tout le monde, j'ai un petit soucie concernant php/mysql

j'ai une liste qui contient des langues (arabe, francais, allemand, italien, ...) dont je poeux séléctionner plusieur langues en meme temps, et puis avec un bouton "Valider" , les langues que j'ai choisi doivent etre insérés dans un champ MySQL, j'éspère que c'est claire jusqu'à là !!

alors ma question c'est comment pourrai je insérer plusieur valeurs (Langues) en meme temps dans un seul champ MySQL ?
et quel est le type de champs que je dois utilisé (SET, BLOB, VARCHAR, ....)

merci infiniment
0
ziad251 Messages postés 34 Date d'inscription mardi 6 mai 2008 Statut Membre Dernière intervention 23 mai 2008 3
14 mai 2008 à 11:15
ca reste tjs un prob si j atteint 100/2008 , alors il me faut un tri alphanumerique ,
merci de ta reponse
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
alexdelareunion Messages postés 545 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 9 octobre 2023 142
14 mai 2008 à 16:34
Plusieurs cas de figure :
1 - Tu as besoin de cette liste, classée, dans ta requête, pour pouvoir enchaîner une deuxiême requête : dans ce cas à mon avis tu es baisé, car ta chaine est alphanumérique (vu qu'elle contient des '/') et qu'un classement alpha te donnera toujours 1, 11, 2, 22, 3 etc... c'est le principe même.
|_ Si tu veux absolument implémenter ces 'codes' en alphanumériques mais les classer en numérique deux solutions :
|_ 1 - Dès la conception, tu prévois ce problème quand tu decide de la signature de tes 'codes' pour ne pas être emmerdé lors du classement.
|_ 2 - La solution la plus Intelligente et 3NF a mon avis, si tes codes ne sont pas alphanumériques, alors ils sont multivalués, tu te dois donc de les 'éclater' quand tu les intègre dans ton modèle de table : exemple un code qui est '100/2008' peut se découper de cette façon 'référence=100', 'année de fabrication=2008'. Donc au lieu de stocker le code 100/2008 en 'dur' dans ta table dans une seule colonne 'code' , tu crée deux colonnes (par exemple) 'code_ref' et 'code_annee'. De cette façon tu peux beaucoup mieux typer les données, 'ref' est un 'INT' et 'annee' est un 'DATE'. Ensuite il t'appartiendra de récupérer chaque 'morceau' de 'code' avec des requêtes, et de concaténer les collones à l'affichage pour obtenir un '100/2008' au lieu de 'ref=100' 'annee=2008'

2 - Cette liste de 'codes' est un résultat final à afficher ou a utiliser : dans ce cas tu récupère cette liste mal classée sous forme de tableau, et tu écris toi même une fonction en php pour pouvoir reclasser ces données selon tes goûts, et ensuite seulement tu aura une liste bien classée. C'est ce qu'on fait le plus souvent quand on est pressé et qu'on ne peut pas bien normaliser la base pour diverses raisons.
0
Tu peux compléter par des zéro à gauche et ensuite ne prendre que la partie de droite.
Exemple
champs CODE contenant '10', '11', '100', '101', etc.

Si tu tries en direct, tu auras
'10'
'100'
'101'
'11'

En faisant right('000000'+CODE,6) donnera
'000010', '000011', '000100', et '000101'
... donc en triant "ORDER BY 1 (l'ordre de SELECT), tu auras
'000010'
'000011'
'000100'
'000101'

SELECT right('000000'+CODE,6), CODE, etc.
FROM ...
ORDER BY 1

Voiloù

J'espère que depuis le temps tu as trouvé la réponse mais c'est pour le cas où quelqu'un chercherait aujourd'hui :-)
0
inuman Messages postés 19 Date d'inscription mardi 6 mai 2008 Statut Membre Dernière intervention 16 mai 2008
14 mai 2008 à 11:13
Salut,
et en mettant 01/2008 02/2008 ?
-1
alexdelareunion
14 mai 2008 à 11:19
Je n'ai pas la réponse, mais si tu as la main sur la base, tu devrais corriger le problème qui est conceptuel, le champ que tu cherche a ordonner n'est manifestement pas de type date, et pourtant il devrait l'être.
D'après ma connaissance en sql, il faudrait te coder une moulinette, pour classer tout ça après l'avoir récupéré.
Quel est le type de serveur sql utilisé ? et dans quel language sont intégrées tes requêtes (php? java? ...?)
-1
ziad251 Messages postés 34 Date d'inscription mardi 6 mai 2008 Statut Membre Dernière intervention 23 mai 2008 3
14 mai 2008 à 16:41
gracias senior , muchas gracias
-1
alexdelareunion
14 mai 2008 à 11:27
A ta place je coderai vite fait un petit algo de clssement en php au lieu de me casser la tête
-2