Tri Varchar avec lettre et chiffre ? - SQL/NoSQL - Programmation
Marsh Posté le 27-12-2011 à 00:16:30
je vais peut être dire une ânerie, mais il me semble, si je comprends bien ce que tu veux faire, qu'il manque un group by (tu n'as pas qu'une seule ligne de résultat là ?)
Donc à partir de là le order n'a pas tellement de sens ...
Marsh Posté le 27-12-2011 à 00:28:07
Salut! Merci de ta réponse!
J'ai bien plusieurs résultats/codes pour certaines recherches mais pas classés dans "l'ordre alphanumérique".
Qu'est-ce que ce group by ?
A la base c'est un script de moteur de recherche que j'ai trouvé sur le net, je l'ai légèrement adapté
Marsh Posté le 27-12-2011 à 10:30:32
Est-ce un select count(*) ou un select * que vous voulez ?
Votre requête select count(*) vous ramène une seule ligne qui est le nombre d’occurrences. Et il ne peut pas y avoir de tri avec une seule ligne.
Donc, je vais supposer que c'est select *
Changer le type Varchar (en quoi ?) ne devrait rien changer. Mais vous pouvez essayer pour voir, ça ne mange pas de pain.
Le group by n'est pas nécessaire ici, car c'est un select * ou un select count(*) global et non pas pour une colonne particulière, ou pour certaines colonnes. Le problème se situerait donc ailleurs.
Normalement le tri se fait correctement avec le Order by. Donc, c'est bizarre. Mais je ne visualise pas bien ce qu'il y a dans la base, ce que sort la requête, et ce que devrait sortir la requête. Un exemple de 3 ou 4 lignes serait le bienvenu.
Si vous avez des données KEC002, KEC012, KEC312, alors ça devrait bien se passer.
Si vous avez des données KEC2, KEC12, KEC312, alors l'ordre sera KEC12, KEC2, KEC312, qui n'est peut-être pas celui que vous voudriez avoir.
Marsh Posté le 27-12-2011 à 14:38:48
Bonjour!
Comme mes connaissances ne sont pas très poussées avec tout ce qui est Mysql,
Voici le script que j'ai légèrement adapté (Suppression du système de page, suppression de l'ID du résultat qui permettait le tri avec Order By ID mais j'ai dû le supprimé car les résultats doivent se classer selon les codes et non les id des codes)
Code :
|
(Désolé pour le pavé)
Et précision : les codes ont le même nombre de caractères donc cela devrait passer
Marsh Posté le 29-12-2011 à 10:48:05
La ligne du Select est intéressante.
Le reste du code n'est pas très utile pour le problème.
Mais surtout, il manque des exemples de :
- données en base
- données retournées actuellement
- données qu'il faudrait que la requête retourne.
Il suffirait de donner juste quelques lignes, pour qu'on comprenne bien le problème, parce que là, pour moi personnellement, la question n'est pas encore très claire, et c'est peut-être le cas pour d'autres personnes c, ce qui expliquerait l'absence de réponse.
Quoi qu'il en soit, je ne vois pas l'intérêt de mettre le "order by..." dans la requête du "select count(*)...". Je pense qu'il faudrait plutôt mettre le "order by..." dans la requête du "select *..."
Marsh Posté le 03-01-2012 à 11:52:28
COCOOP a écrit : Salut! |
je vois pas 4 lettres dans ton exemple moi.
sinon pour prendre le pb dans un autre sens, une recherche normalement ca se trie par pertinence.
pour ca il y a "match against"
http://dev.mysql.com/doc/refman/5. [...] earch.html => recherche fullltext
http://dev.mysql.com/doc/refman/5. [...] olean.html => recherche mode boolean (et/ou/non...)
Marsh Posté le 25-12-2011 à 15:14:10
Salut!
J'ai un moteur de recherche où les titres des résultats sont des codes de type 4 lettres puis 3 chiffres (Ex : KEC012) dans un colonne nommée Code de type Varchar, Defaut=null, latin1_general_cs et Null=Oui
Or les résultats ne sont jamais triés dans l'ordre alphabétique+numérique avec ce genre de ligne :
Dois-je changer le type "Varchar" ? Ou Order by code nest pas bon pour ça ?
Merci d'avance !
Message édité par COCOOP le 25-12-2011 à 15:15:20