Formation clé primaire

Résolu
cs_didou8513 Messages postés 58 Date d'inscription vendredi 1 octobre 2004 Statut Membre Dernière intervention 11 mars 2005 - 3 mars 2005 à 10:00
cs_didou8513 Messages postés 58 Date d'inscription vendredi 1 octobre 2004 Statut Membre Dernière intervention 11 mars 2005 - 3 mars 2005 à 15:18
Bonjour, J'espère que je vais ètre assez clair sur mon problème car c'est assez difficile à expliquer.

Je possède une base de données oracle et je dois réaliser une application php. Je dois remplir un formulaire concernant des informations sur des entreprises, ces infos doivent alimenter ma base. Pour chaque insertion la clé primaire se forme automatiquement, de la manière suivante : année(yy)+code postal(5 chiffres)+numéro auto(3 chiffres). Je vous donne un exemple : 05+85000+001 ce qui donne 0585000001.

Mon problème est sur le numéro auto. Il doit augmenter si 2 entreprises ont les 7 permiers chiffres identiques. C'est à dire qu'il est possible d'avoir : 05+85210+001 et 05+85000+001. Si 2 ou même plusieurs entreprises ont les 7 premiers chiffres identiques, il faudrait avoir : 05+85000+001 et 05+85000+002

Voila, désolé si je n'est pas été assez clair, je ne savais pas comment expliquer mon problème. Merci de votre aide

11 réponses

tucsoufle Messages postés 1250 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 30 septembre 2007 1
3 mars 2005 à 10:31
salut

il faut que tu test si la valeur est deja prise

si tu a 0585000, tu fait un truc du genre :

$cherche_id = 001;
do
{

$cherche_id++;

$id_vide = @mysql_query("SELECT ton_champ FROM ta_table WHERE ton_champ='0585000".

$cherche_id."'");
}
while(false!=($rep = @mysql_fetch_array($id_vide)));


voila, un truc de ce style

@+

Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Mon site Internet
3
cs_didou8513 Messages postés 58 Date d'inscription vendredi 1 octobre 2004 Statut Membre Dernière intervention 11 mars 2005
3 mars 2005 à 10:59
Salut, tu peux m'expliquer le while je comprends pas trop, merci
0
tucsoufle Messages postés 1250 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 30 septembre 2007 1
3 mars 2005 à 11:15
alors, en traduction ca fait,



le do .... while() ca veut dire tant que
donc tant que il y a un resultat a ta requete, tant qu'une ligne est renvoyé

do
{

....


}
while(false!=($rep = @mysql_fetch_array($id_vide)));


tu éxécute ça :

$cherche_id++;

$id_vide = @mysql_query("SELECT ton_champ FROM ta_table WHERE ton_champ='0585000".

$cherche_id."'");

dés qu'il n'y a pas de resultat, on sort de la boucle et dans $cherche_id, tu a ta nouvelle valeur



donc le false!=($rep = @mysql_fetch_array($id_vide))


ca te dit si il y a un resultat, c'est à dire si l'id est déjà prise


Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Mon site Internet
0
cs_didou8513 Messages postés 58 Date d'inscription vendredi 1 octobre 2004 Statut Membre Dernière intervention 11 mars 2005
3 mars 2005 à 11:22
Est-ce que tu pourais traduire ton idée avec les fonctions d'oracle ? merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tucsoufle Messages postés 1250 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 30 septembre 2007 1
3 mars 2005 à 11:30
désolé je ne connais pas oracle

mais ca doit etre a peut prés équivalent non ?

Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Mon site Internet
0
cs_didou8513 Messages postés 58 Date d'inscription vendredi 1 octobre 2004 Statut Membre Dernière intervention 11 mars 2005
3 mars 2005 à 11:36
ben non justement, mais c'est pas grave je vais suivre ton raisonnement je vais bien y arriver, merci salut.
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
3 mars 2005 à 13:11
Salut,



une requête dans une boucle ?



t'es en serveur dédié au moins lol



a +


<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0
tucsoufle Messages postés 1250 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 30 septembre 2007 1
3 mars 2005 à 13:54
salut antho !

pourquoi ca t'etonne ?

l'accés a la base est vite surchargé tu pense ?

si oui dans quel proportion ? si tu a fait des tests là dessus, ça m'interesse

Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Mon site Internet
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
3 mars 2005 à 14:14
Bah disons que une requête dans une boucle ça peut très vite surcharger
le serveur, donc de toute façon EN GENERAL (parce que tu peux avec une
seule requête cramer un serveur si tu veux) moins t'as de requêtes plus
c'est rapide....



Enfin bon y'a tellement de cas particuliers qu'il ne faut pas prendre
cet exemple pour une généralité, par exemple avant pour l'affichage de
la page d'accueil de mon forum j'utilisais 5 requêtes, maintenant au
moins 20, et c'est largement plus rapide, j'ai des temps de génération
inférieurs au dixième de seconde chez moi, et sous mon hébergeur aux
heures creuses c'est encore plus rapide ;-)

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0
tucsoufle Messages postés 1250 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 30 septembre 2007 1
3 mars 2005 à 14:21
oki disons seulement qu'il faut éviter au possible de faire ça mais
dans certain cas omme celui de didou ben faut quand meme le faire !!!
je suis d'acord avec toi


pffff ! quand ta dit ça j'ai cru que j'avais fait une énorm bétise...

merci pour ta reponse

@+

Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Mon site Internet
0
cs_didou8513 Messages postés 58 Date d'inscription vendredi 1 octobre 2004 Statut Membre Dernière intervention 11 mars 2005
3 mars 2005 à 15:18
Je te remercie de m'avoir aidé, j'ai suivi ton raisonnement et ça marche, encore merci salut
0
Rejoignez-nous