Problème avec order by
Résolu/Fermé
livatill
Messages postés
5
Date d'inscription
mardi 22 juillet 2008
Statut
Membre
Dernière intervention
22 juillet 2008
-
22 juil. 2008 à 10:15
nzo - 23 nov. 2009 à 07:41
nzo - 23 nov. 2009 à 07:41
A voir également:
- Problème avec order by
- Home by me - Télécharger - 3D
- Zen by deezer - Télécharger - Santé & Bien-être
- Cxl by christian lacroix avis - Forum Consommation & Internet
- Oqee by free sur pc windows 10 - Forum TV & Vidéo
- Object not found by the @paramconverter annotation ✓ - Forum PHP
5 réponses
PeterPeterPeter
Messages postés
202
Date d'inscription
jeudi 17 juillet 2008
Statut
Membre
Dernière intervention
22 juin 2010
30
22 juil. 2008 à 10:18
22 juil. 2008 à 10:18
Tu peux afficher la requête que tu fais, ça sera plus simple pour voir l'erreur :)
Frappe Misere
Messages postés
2677
Date d'inscription
vendredi 22 février 2008
Statut
Membre
Dernière intervention
10 août 2011
568
22 juil. 2008 à 10:27
22 juil. 2008 à 10:27
tu es sur que le format de ton champs de donnée est bien "chiffre" ?
là il trie comme si c'etait du texte.
là il trie comme si c'etait du texte.
livatill
Messages postés
5
Date d'inscription
mardi 22 juillet 2008
Statut
Membre
Dernière intervention
22 juillet 2008
22 juil. 2008 à 13:21
22 juil. 2008 à 13:21
Non le format du champ est "varchar" donc c'est du texte. Comment dois-je faire pour qu'il le trie comme si c'était un "chiffre"? Car je ne peux pas changer le format du champ.
Merci.
Merci.
Frappe Misere
Messages postés
2677
Date d'inscription
vendredi 22 février 2008
Statut
Membre
Dernière intervention
10 août 2011
568
>
livatill
Messages postés
5
Date d'inscription
mardi 22 juillet 2008
Statut
Membre
Dernière intervention
22 juillet 2008
22 juil. 2008 à 13:29
22 juil. 2008 à 13:29
dans ta requete, tu ajoutes un champs qui sera : clng(ton champ en varchar)
pour le transformer en valeur numérique et tu te sers de celui là pour ton order by
pour le transformer en valeur numérique et tu te sers de celui là pour ton order by
livatill
Messages postés
5
Date d'inscription
mardi 22 juillet 2008
Statut
Membre
Dernière intervention
22 juillet 2008
>
Frappe Misere
Messages postés
2677
Date d'inscription
vendredi 22 février 2008
Statut
Membre
Dernière intervention
10 août 2011
22 juil. 2008 à 13:43
22 juil. 2008 à 13:43
Je suis en MYSQL 5 et il dit que ce fonction n'existe pas. Merci bcp quand même!
Frappe Misere
Messages postés
2677
Date d'inscription
vendredi 22 février 2008
Statut
Membre
Dernière intervention
10 août 2011
568
22 juil. 2008 à 14:09
22 juil. 2008 à 14:09
peut etre "clong", regarde l'aide pour l'orthographe exact mais elle existe.
Christounet
Messages postés
1264
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 384
22 juil. 2008 à 14:19
22 juil. 2008 à 14:19
Bonjour livatill, Frappe Misere
Avec Mysql, il existe la fonction CAST qui permet de convertir une variable en un autre type, dans ton cas le code devrait être le suivant
A plus
Avec Mysql, il existe la fonction CAST qui permet de convertir une variable en un autre type, dans ton cas le code devrait être le suivant
select count(idSms) as nbrSMS, numTirage from sms_report group by numTirage order by cast(numTirage as signed)
A plus
Salut Christounet,
Désolé de t'écrire en privé mais j'ai vu que t'avais réussi à résoudre un problème identique au miens et je n'y arrive toujours pas...
Je fais la requête suivante:
et lorsque j'affiche le résultat, il ne me trie pas les données convenablement à savoir, il m'affiche
cal 1, cal 10, cal 11, cal 12, ..., cal 2, cal 3
Tu avais proposé la solution d'écrire
mais à ce moment-là, il m'affiche
cal 1, cal 13, cal 12, cal 11, cal 10, cal 9, ... cal 2, cal 14
(j'ai 19 entrée sous cal)
Aurais-tu une solution pour me sauver???
Désolé de t'écrire en privé mais j'ai vu que t'avais réussi à résoudre un problème identique au miens et je n'y arrive toujours pas...
Je fais la requête suivante:
SELECT idgis FROM gis WHERE gis.nom_loc_gis LIKE "%valeur%" ORDER BY num_loc_gis, nom_loc_gis
et lorsque j'affiche le résultat, il ne me trie pas les données convenablement à savoir, il m'affiche
cal 1, cal 10, cal 11, cal 12, ..., cal 2, cal 3
Tu avais proposé la solution d'écrire
SELECT idgis FROM gis WHERE gis.nom_loc_gis LIKE "%valeur%" ORDER BY cast(num_loc_gis as signed), nom_loc_gis
mais à ce moment-là, il m'affiche
cal 1, cal 13, cal 12, cal 11, cal 10, cal 9, ... cal 2, cal 14
(j'ai 19 entrée sous cal)
Aurais-tu une solution pour me sauver???
Christounet
Messages postés
1264
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 384
>
moaaa
26 mars 2009 à 10:50
26 mars 2009 à 10:50
Bonjour,
Peux-tu m'indiquer le type des variables idgis , nom_loc_gis et num_log_gis ainsi que quelques exemples des valeurs contenues dans les variables, cela devrait peu-être me donner une idée de solution.
A plus
Peux-tu m'indiquer le type des variables idgis , nom_loc_gis et num_log_gis ainsi que quelques exemples des valeurs contenues dans les variables, cela devrait peu-être me donner une idée de solution.
A plus
Moaaa
Messages postés
4
Date d'inscription
mercredi 7 novembre 2007
Statut
Membre
Dernière intervention
26 mars 2009
>
Christounet
Messages postés
1264
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
26 mars 2009 à 13:42
26 mars 2009 à 13:42
Salut Christounet,
Merci d’ores et déjà pour la promptitude de ta réponse. Effectivement, j'avais oublié ce petit "détail" -> je baigne dedans depuis un moment donc pour moi c'était évident
Alors "idgis" est un entier dont on lui rentre la valeur (pas en auto-increment et donc valeurs non successives)
"nom_loc_gis" et "num_log_gis" sont tous deux de type VARCHAR() ayant l'interclassement ucs2_unicode_ci (je ne pense pas que ça change quelque chose mais je te donne toutefois l'info)
Pour les données contenues, voici quelques exemples:
Avec la requête
le résultat obtenu est
vale 1, vale 10, val 11,...,vale 19, vale 2, vale 20, vale 21, vale 22, ..., vale 3, vale 30,...
et en essayant avec le "cast":
c'est encore pire ->
vale 40, vale 29, vale, 28, ..., vale 23, vale 22, vale 30, vale 31, vale 39, vale 38 etc. J'ai regardé comment il arrivait à ce résultat mais alors là???
Si tu te poses la question (fortement justifiée) de savoir pourquoi le "num_loc_gis" est en VARCHAR() puisque visiblement, il n'y a que des chiffres, c'est que c'est une énorme base de données donc voici un tout petit extrait et on peut trouver des num_loc_gis ayant des valeurs "11 a", "20 bis", etc.
Enfin, une solution serait de mettre un "0" pour les chiffres inférieur à dix, mais étant donné qu'il y a un grand nombre d'enregistrements, je ne sais pas si il existe une méthode pour forcer cela.
Merci encore pour le temps que tu me consacres et @++
p.s: Suis fan de ta citation!!!
p.s.2: T'enverrai une bière virtuelle à défaut de pouvoir t'en payer une vraie (encore que...)
Merci d’ores et déjà pour la promptitude de ta réponse. Effectivement, j'avais oublié ce petit "détail" -> je baigne dedans depuis un moment donc pour moi c'était évident
Alors "idgis" est un entier dont on lui rentre la valeur (pas en auto-increment et donc valeurs non successives)
"nom_loc_gis" et "num_log_gis" sont tous deux de type VARCHAR() ayant l'interclassement ucs2_unicode_ci (je ne pense pas que ça change quelque chose mais je te donne toutefois l'info)
Pour les données contenues, voici quelques exemples:
idgis | nom_loc_gis | num_loc_gis --------------------------------------------------------------- 93 | Vale | 1 3237 | Vale | 2 91 | Vale | 3 90 | Vale | 4 89 | Vale | 5 80 | Vale | 6 79 | Vale | 7 1540 | Vale | 8 73 | Vale | 9 83 | Vale | 10 2540 | Vale | 11 2544 | Vale | 12 554 | Vall | 1 555 | Vall | 2 556 | Vall | 3 557 | Vall | 4
Avec la requête
SELECT idgis FROM gis WHERE gis.nom_loc_gis LIKE "%val%" ORDER BY nom_loc_gis, num_loc_gis
le résultat obtenu est
vale 1, vale 10, val 11,...,vale 19, vale 2, vale 20, vale 21, vale 22, ..., vale 3, vale 30,...
et en essayant avec le "cast":
SELECT idgis FROM gis WHERE gis.nom_loc_gis LIKE "%val%" ORDER BY nom_loc_gis , cast(num_loc_gis as signed)
c'est encore pire ->
vale 40, vale 29, vale, 28, ..., vale 23, vale 22, vale 30, vale 31, vale 39, vale 38 etc. J'ai regardé comment il arrivait à ce résultat mais alors là???
Si tu te poses la question (fortement justifiée) de savoir pourquoi le "num_loc_gis" est en VARCHAR() puisque visiblement, il n'y a que des chiffres, c'est que c'est une énorme base de données donc voici un tout petit extrait et on peut trouver des num_loc_gis ayant des valeurs "11 a", "20 bis", etc.
Enfin, une solution serait de mettre un "0" pour les chiffres inférieur à dix, mais étant donné qu'il y a un grand nombre d'enregistrements, je ne sais pas si il existe une méthode pour forcer cela.
Merci encore pour le temps que tu me consacres et @++
p.s: Suis fan de ta citation!!!
p.s.2: T'enverrai une bière virtuelle à défaut de pouvoir t'en payer une vraie (encore que...)
Christounet
Messages postés
1264
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 384
>
Moaaa
Messages postés
4
Date d'inscription
mercredi 7 novembre 2007
Statut
Membre
Dernière intervention
26 mars 2009
26 mars 2009 à 14:35
26 mars 2009 à 14:35
Bonjour,
J'ai crée une table Test dans Mysql avect quelques données de ta table et la requête suivante devrait faire ce que tu veux
La fonction LPAD complète à gauche la chaîne de caractères (cast(num_loc as char(10)) avec le caractère 0 pour obtenir une chaîne de 15 caractères. J'ai choisi 10 et 15, tu peux évidemment changer ces deux valeurs si ta variable num_loc contient plus de 10 caractères.
A plus
PS: Je ne suis pas un grand amateur de bière mais plutôt de vin rouge.
J'ai crée une table Test dans Mysql avect quelques données de ta table et la requête suivante devrait faire ce que tu veux
SELECT idgid , nom_loc , num_loc FROM Test ORDER BY nom_loc, lpad( cast( num_loc AS char( 10 ) ) , 15, '0' ) Résultat: 93 Vale 1 3237 Vale 2 90 Vale 4 91 Vale 6 83 Vale 10 2544 Vale 11 554 Vall 2 1540 Vall 10a 2345 Vall 20bis
La fonction LPAD complète à gauche la chaîne de caractères (cast(num_loc as char(10)) avec le caractère 0 pour obtenir une chaîne de 15 caractères. J'ai choisi 10 et 15, tu peux évidemment changer ces deux valeurs si ta variable num_loc contient plus de 10 caractères.
A plus
PS: Je ne suis pas un grand amateur de bière mais plutôt de vin rouge.
Moaaa
Messages postés
4
Date d'inscription
mercredi 7 novembre 2007
Statut
Membre
Dernière intervention
26 mars 2009
>
Christounet
Messages postés
1264
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
26 mars 2009 à 16:04
26 mars 2009 à 16:04
T'es un chef Christounet!!!
1000 merci!!! Et particulièrement merci d'avoir pris le temps de faire les tests et d'avoir résolu mon problème...
Et surtout bravo, t'es vraiment un baron!
++
1000 merci!!! Et particulièrement merci d'avoir pris le temps de faire les tests et d'avoir résolu mon problème...
Et surtout bravo, t'es vraiment un baron!
++
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
livatill
Messages postés
5
Date d'inscription
mardi 22 juillet 2008
Statut
Membre
Dernière intervention
22 juillet 2008
22 juil. 2008 à 16:37
22 juil. 2008 à 16:37
Merci beaucoup Christounet, ça marche parfaitement à présent!
a++
a++
22 juil. 2008 à 13:17
La requête marche bien seulement il affiche les 10, 11, 12, avant 2. C'est le 1 qu'il regarde dans le order by.
Merci.