Dart Posté 7 Septembre 2007 Partager Posté 7 Septembre 2007 Bonjour à tous , Voila le problème , je souhaite créer un identifiant de la forme 22007-(NumId) ou 72007-(NumID) dans une de mes tables. Dans mon code je dois repérer le prochain numéro à créer lorsque je crée un nouveau login. Pour cela , je fais une recherche du genre : SELECT MAX(login)as max FROM `listeinscription` where login LIKE "22007-%"; (le nombre 22007 représente un critère de tri pour moi). Cette méthode fonctionne bien , sauf que lorsque j'arrive à 22007-10 , il me répond que le maximum est 22007-9. J'ai vérifier dans la table et effectivement c'est le cas Quelqu'un aurait une idée du problème ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Portekoi Posté 7 Septembre 2007 Partager Posté 7 Septembre 2007 Normal, ta chaine n'est pas numérique. Il ne prend pas '10' mais '1'. Donc c'est normal Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dart Posté 7 Septembre 2007 Auteur Partager Posté 7 Septembre 2007 (modifié) Et qu'est-ce que j'ai comme solution pour éviter le problème ? (Ouais , je sais , la passer en Numérique , mais j'peux point.... v_v) Modifié 7 Septembre 2007 par Dart Lien vers le commentaire Partager sur d’autres sites More sharing options...
Portekoi Posté 7 Septembre 2007 Partager Posté 7 Septembre 2007 Fait un replace dans ta requete du '-' par '' et convertis la chaine restante en numérique, juste le temps de la requête Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dart Posté 7 Septembre 2007 Auteur Partager Posté 7 Septembre 2007 Merci de ton aide .... C'est une solution intéressante mais un peu compliqué (en fait surtout pour faire le deuxième replace et tout remettre en ordre). En tout cas je vais regarder ça . Merci encore Lien vers le commentaire Partager sur d’autres sites More sharing options...
Portekoi Posté 7 Septembre 2007 Partager Posté 7 Septembre 2007 Non rien de compliqué et l'ordre se fera tout seul Lien vers le commentaire Partager sur d’autres sites More sharing options...
Portekoi Posté 7 Septembre 2007 Partager Posté 7 Septembre 2007 Et en plus tu n'as pas besoin du 'convert' car la conversion se fait implicitement Ce qui donne : Select max(replace(login ,'-','')) from `listeinscription` where login LIKE "22007-%"; Lien vers le commentaire Partager sur d’autres sites More sharing options...
petit-ourson Posté 7 Septembre 2007 Partager Posté 7 Septembre 2007 Et une clef primaire composée, ce ne serait pas mieux ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
marcb Posté 7 Septembre 2007 Partager Posté 7 Septembre 2007 (modifié) Dart, Tu peux aussi faire ça : SELECT max(0 + right(login, length(login) - 6)) as max FROM `listeinscription` where login LIKE "22007-%"; Explication : - je vire les 6 caractères de gauche (22007-) - à adapter s'il y a parfois plus de 5 caractère avant le '-'. - j'ajoute 0 (ça convertit la chaîne en nombre - je prends le max Sinon, tu ne peux pas transformer ton 22007-9 en 22007-00009 ? Ca résoudrait aussi ton problème, le tri se ferait correctement. M Modifié 7 Septembre 2007 par marcb Lien vers le commentaire Partager sur d’autres sites More sharing options...
Leonick Posté 8 Septembre 2007 Partager Posté 8 Septembre 2007 le mieux restant quand même de formater tes nombres (clés) avec 2 octets, soit 09 puis 10, comme cela pas de problème Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant