Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1491 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Résolu][SQL] Problème classement ASC/DESC sur VARCHAR

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu][SQL] Problème classement ASC/DESC sur VARCHAR

n°1406210
Fiiies1
Jase From Outta Space
Posté le 13-07-2006 à 11:27:46  profilanswer
 

Bonjour à tous,
 
Dans le cadre du développement d'une appli pour mon stage, je dois lister une table où je peux effectuer des tris et des classements.
Voici un screenshot :
 
http://img137.imageshack.us/img137/3371/sc6hz.th.jpg
 
Au niveau des classements, aucun souci excepté un : le classement sur la référence.
La référence des dossiers est un VARCHAR2. Pourquoi? C'est simple, la référence d'un nouveau dossier est incrémentée de 1 par rapport au dernier dossier créé, mais on peut également faire des reprises de dossiers, et cette reprise se nommera "refDossierInitial" + "r" + "numReprise (ex : 13r1).
 
Bref, à l'heure actuelle, quand je fais un classement sur la refDossier, et bien ça fait un classement tout bête sur un VARCHAR... Donc si j'ai des dossiers ayant ces ref : 2, 5, 8, 11, 13, 25, 33 => Si je fais un classement ASC, ça me sort 11, 13, 2, 25, 33, 5, 8. Logique car ça regarde caractère par caractère.
 
Ce que je voudrais faire, c'est donc CASTER ces numDossiers en Integer les refDossier. Ca c'est le premier point.
Deuxième point, lorsque je rencontre une ref de dossierReprise (style 13r1), je voudrai sélectionner que la partie qui m'intéresse à savoir le "13" et supprimer le "r" avec ce qui suit ("r1" dans mon cas).
 
Voici ma requête actuelle :
 

Code :
  1. if ($_SESSION[$_GET['ordre']] == "ASC" )
  2. {
  3. if ($_SESSION['AjoutRequete'] == "" )
  4.  $db->query("SELECT idDossier, etatDossier, natureDemandeDossier, natureDossier, dateEcheanceDossier,
  5. refDossierInitial, CAST(refDossier AS SIGNED INTEGER) as newRefDossier, idClientDossier, idFormaliteCnilDossier,
  6. dateLivraisonDossier, idAgentDossier, titreDossier FROM dossier ORDER BY ".$_GET['ordre']." ASC ;", 8) ;
  7. else
  8.  $db->query("SELECT idDossier, etatDossier, natureDemandeDossier, natureDossier, dateEcheanceDossier,
  9. refDossierInitial, CAST(refDossier AS SIGNED INTEGER) as newRefDossier, idClientDossier, idFormaliteCnilDossier,
  10. dateLivraisonDossier, idAgentDossier, titreDossier FROM dossier ".$_SESSION['AjoutRequete']."  ORDER BY ".$_GET['ordre']." ASC ;", 8) ;
  11. }


 
Voilà, donc ça me classe bien les refDossier mais par VARCHAR et non INTEGER.
 
Comment pourrais je procéder? Des idées?
 
Merci à vous ;)
 
Fiiies


Message édité par Fiiies1 le 19-07-2006 à 16:12:41
mood
Publicité
Posté le 13-07-2006 à 11:27:46  profilanswer
 

n°1406227
Fiiies1
Jase From Outta Space
Posté le 13-07-2006 à 11:43:23  profilanswer
 

Problème résolu, il suffisait de faire un ORDER BY newRefDossier et ça marche impeccable! :)
Ce qui donne comme requête :
 

Code :
  1. SELECT idDossier, etatDossier, natureDemandeDossier, natureDossier, dateEcheanceDossier, refDossierInitial,
  2. CAST(refDossier AS SIGNED INTEGER) as newRefDossier, idClientDossier, idFormaliteCnilDossier,
  3. dateLivraisonDossier, idAgentDossier, titreDossier FROM dossier ORDER BY newRefDossier ASC ;


 
Voilà, c'était pas difficile au final!


Message édité par Fiiies1 le 13-07-2006 à 11:44:32
n°1408625
Fiiies1
Jase From Outta Space
Posté le 18-07-2006 à 14:42:55  profilanswer
 

J'ai un autre souci...  :o  
 
Ce coup ci, je fais un affichage de périodicités.
La référence d'une périodicité est un VARCHAR2, qui a cette forme "numDossier" + p + "numPeriodicite" (ex : 3p2, 5p6, 1p11...)
 
Bref, lorsque j'affiche ma liste, je souhaite pouvoir effectuer un classement dessus.
Pour le moment, j'ai casté le champ refPeriodicite en entier dans la requête, et j'obtiens ça pour un classement ASC sur la refPeriodicite :
 
http://img80.imageshack.us/img80/8646/classementdefaillantsurrefev5.th.jpg
 
Vous constatez que je n'ai pas de souci au niveau du classement de la première partie de la ref (qui correspond au numDossier), mais au niveau de la deuxième partie (le num de la périodicité), ça foire encore.
 
Bref, le principe serait donc de découper à deux reprises la refPeriodicite de manière à obtenir le "num du dossier", puis le "num de la périodicité", et de faire un classement sur ces deux champs avec en priorité le "num du dossier".
 
Voici la requête que j'ai essayé, et qui ne marche pas... :s
 

Code :
  1. SELECT idPeriodicite, refPeriodicite, idAgentPecPeriodicite, datePecPeriodicite,
  2. dateEcheancePeriodicite, dateLivraisonPeriodicite, etatPeriodicite, refDossier,
  3. SUBSTRING_INDEX(CAST(refPeriodicite AS SIGNED INTEGER), 'p', 1) AS newRefPeriodicite,
  4. SUBSTRING_INDEX(CAST(refPeriodicite AS SIGNED INTEGER), 'p', -1) AS numPeriodicite
  5. FROM periodicite ORDER BY newRefPeriodicite, numPeriodicite ASC ;


 
Voilà, je galère quelque peu et après cela, mon projet sera bien avancé dira t'on. C'est juste un petit détail que je souhaite régler au plus vite.
 
Merci à vous!
 
 :)


Message édité par Fiiies1 le 18-07-2006 à 14:44:11
n°1409503
Fiiies1
Jase From Outta Space
Posté le 19-07-2006 à 15:38:16  profilanswer
 

UP (désolé)!
Je pense que si vous prenez le temps de lire attentivement mon dernier post, vous devriez avoir des idées. ;)
 
Merci en tous les cas.

n°1409540
moonboot
Posté le 19-07-2006 à 16:01:52  profilanswer
 

essaie plutôt de faire ton cast après ton substring, parce que là j'ai peur que ton cast ne sert à rien après le passage du substring, il doit te faire un order sur deux alphanumériques et non sur deux entiers comme tu le souhaites.

n°1409553
Fiiies1
Jase From Outta Space
Posté le 19-07-2006 à 16:09:54  profilanswer
 

Impeccable, t'es un chef Mister ;)
Ca marche très bien!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Résolu][SQL] Problème classement ASC/DESC sur VARCHAR

 

Sujets relatifs
Probléme d'ASPproblème de connection du a un plugin
[Résolu] Problème de droit en lecture! [move_uploaded_file()][C#] [RESOLU] FillSchema et Parameters incompatible ?
Probleme arrondissementlatin_general_ci et pourtant des caractere utf8 apparaissent! [résolu]
problème : mktime et dateProblème passge MFC / Non MFC
Aide sur SQL concernant des dates/durées 
Plus de sujets relatifs à : [Résolu][SQL] Problème classement ASC/DESC sur VARCHAR


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR