|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() |
Bonjour,
Je suis dans un cas, qui me parrait assez courrant mais sur lequel ma solution me parait pas trés jolie... Prenons une table toute bête avec 2 champs, par exemple une table "Projets" : - un entier auto-incrémenté, indentifiant unique et clé primaire du projet - une chaine, représentant le nom d'un projet Je dois faire une fonction qui renvoi l'identifiant en prenant en parametre le nom, et qui dois inserer le tupple si jamais il n'existe pas Ma premiere solution a consisté a faire directement la requete d'insertion, et si elle renvoyait une erreur autre que "duplicate key", j'affichais l'erreur sinon je faisais mon select et revoyais l'identifiant...mais... Ma configuration est la suivante : PHP4 et postgresSQL 8.1 PHP4 n'ayant pas de try/catch, si j'ai une erreur sur ma requete d'insertion, elle est affichée..(naturelement, il n'est pas question d'inhiber les message sd'erreurs/warnings du serveur) Ma solution pas trés jolie consiste, dans le pire des cas et malheureusement le plus courrant, à effectuer 3 requetes : requete 1) Un premier select qui test l'existance du projet requete 2) Le projet n'existe pas, je l'insere requete 3) Je refais un select pour récupérer l'identifiant fraichement créé Je trouve ça pas trés jolie et avoir autant de requete augmente les chances d'erreurs...n'y a-t-il pas un moyen d'en diminuer le nombre? merci à tous |
|
|
00
|
|
|
#2 |
|
Membre chevronné
![]() Inscription : mai 2005 Messages : 657 ![]() |
Salut,
Si je comprends bien ton problème, ce que tu cherches est une fonction qui retournerais l'ID du dernier INSERT effectué. Je sais que ça existe sur MySQL (mysql_insert_id()). J'imagine que pour postgres une fonction équivalente existe également, tu as regardé dans les docs ? Tu peux peut-être également regarder/poser la question dans le forum spécifique a postgres |
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() |
j'ai regardé la doc, mais j'ai rien trop vu qui ressemblerai à ça...
je vais poster dans le forum postgres...desfois que j'aurais loupé quelques choses merci pour ta réponse |
|
|
00
|
|
|
#4 |
![]() ![]() |
Hello,
As tu vraiment besoin de l'etape n°3 ? Car à l'etape n°1 il me semble que si ton projet existe tu le recupere directement. Tu peux aussi imaginer de faire une fonction getOrCreateProject() par exemple. A++ |
|
|
00
|
|
|
#5 | ||
|
Nouveau Membre du Club
![]() |
Citation:
Citation:
Effectivement si le projet existe, je ne passe pas par les etapes 2 et 3, je renvoi direct l'ID renvoyé par la requete de l'étape 1 |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com