Jump to content
Sign in to follow this  
Dart

9 > 10 (?) : Problème de Requete MySQL

Rate this topic

Recommended Posts

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 :wacko:

Quelqu'un aurait une idée du problème ?

Share this post


Link to post
Share on other sites

Normal, ta chaine n'est pas numérique.

Il ne prend pas '10' mais '1'.

Donc c'est normal :)

Share this post


Link to post
Share on other sites

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)

Edited by Dart

Share this post


Link to post
Share on other sites

Fait un replace dans ta requete du '-' par '' et convertis la chaine restante en numérique, juste le temps de la requête :)

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Non rien de compliqué et l'ordre se fera tout seul :)

Share this post


Link to post
Share on other sites

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-%";

Share this post


Link to post
Share on other sites

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

Edited by marcb

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...