et si on donne a la fonction une chaine de caracteres ???

Eléphanteau du PHP | 12 Messages

02 janv. 2006, 18:22

Salut,


je veus faire une fonction qui génére les identificateurs pour mes tables ,
ces identif ne sont pas des entiers mais plutot des chaines ,,
en testant MAX(id) ( avec id varchar ) ça me renvoi la valeur la plus grande de la somme des ASCII des caracteres de la chaine ( enfin..c'est ce que jé deviner )

si j'ai des valeurs , v1,v2,v3, ça me renvoie v3
et si j'ai v5,v6,v9,,, ça me renvoi v9

c'est bon jusque la ?! non?

et si j'ai v9 v12 v10 ca me renvoi v9 !!! :cry:

Alors comment je peux extraire le max de mes id :evil:

SOS !!!

et Merci

Mammouth du PHP | 19672 Messages

02 janv. 2006, 19:24

Il faut extraire la partie numérique de la chaine et la traiter comme un numérique et non comme une chaine de caractères, mais tu devras le traiter par programmation en récupérant la liste des clés... bonjour l'usine à gaz. :-k

Qu'est-ce qui t'empèche d'avoir des clés purement numérique auto-incrémentées ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 12 Messages

03 janv. 2006, 10:41

salut cyrano !

benh le prob c'est que j'ai 2 tables principales toip et voip qui sont liées par des clés étarngères avec d'autres tables ( commande_services, commande_communication, bon_comande,..) toutes ces dernieres tables ont une clé étrangère soit vers voip , soit vers toip, donc au lieu d'avoir deux clés étarngères id_voip et id_toip dans la meme tables et c'est sûr que juste l'une des 2 sera utilisée pour un enregistrement , l'idée était d'avoir une seule clé étrangère id_toip_voip qui va contenir soit id_voip, soit id_toip, il fallait donc distinguer entre la valeurs des id de toip et voip ,,

maintenant c'est soit je vais éclater ces id_toip_voip :x

soit je vais ajouter un aute champ id numérique a part la clé de la table qui est varchar et faire le max sur le id numérique ,,


Merciiiiiii

Mammouth du PHP | 19672 Messages

03 janv. 2006, 12:33

J'ai l'impression que la structure de ta base de données a été curieusement modélisée :-k Nous mettrais-tu la structure de tes trois tables qu'on voit s'il n'y aurait pas matière à amélioration possible sans bouleversement majeur ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

03 janv. 2006, 12:36

si les données sont toujours sous cette forme => un cartère + chiffres tu peux essayer comme ça:

Code : Tout sélectionner

SELECT MAX(CAST(SUBSTRING(champ,2) AS UNSIGNED)) FROM table
SUBSTRING ne récupère que le chiffre
CAST permet de passer le résultat (type varchar) en type numérique
MAX prend le max du tout :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 12 Messages

03 janv. 2006, 13:48

salut truc !!

elle est superbe ta requete!

tu as juste oublié de mettre le champ qui va contenir le max

SELECT MAX(CAST(SUBSTRING(champ,2) AS UNSIGNED)) AS idMax FROM table

je vais essayer ça ,,


plus besoin qu'on discute la structure de la BD Cyrano !

Merci à tous !

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

03 janv. 2006, 14:09

Si tu te sens motivé tu peux toujours en parler de la structure, une optimisation est toujours bienvenue.

Ou du moins n'oublis pas de mettre le [Résolu].

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute