Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/04/2007, 19h49   #1
Invité de passage
 
Inscription : avril 2007
Messages : 22
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 22
Points : 4
Points : 4
Par défaut [SQL] Récupèrer un identifiant pour l'auto incrementer

En fait je voudrais récupérer le dernier Numéro de licencies rentrés et lui ajouter 1 quelqu'un aurait-il une solution voici mon code
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion '.mysql_error());
    mysql_select_db('connexion',$db)  or die('Erreur de selection '.mysql_error()); 
    $sql3 = mysql_query('SELECT max(Num_licencies) FROM Licencies') or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    $row = mysql_result($sql3, 2);
    $sql = "INSERT INTO licencies(Nom_licencies, Num_licencies, Prenom_licencies,club, path_photo, date_naissance) VALUES('$nom','$row','$prenom','$club','$path_photo','$date_naiss')"; 
     $sql2 = "INSERT INTO auth(login, motdepasse, ip) VALUES ('$login','$mdp','')"; 
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
    mysql_query($sql2) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
    echo 'Vos infos on été ajoutées.'; 
 
    mysql_close();  // on ferme la connexion 
    }
 
?>
klr54000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2007, 22h41   #2
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
Bonjour,
Pourquoi ne mets tu pas ton champ en AUTOINCREMENT ?

1 : ça t'éviteras de faire de savants calculs qui , en cas de concurrence (de requêtes) , pourraient s'avérer hasardeux.
2 : Tu vas gagner du temps
3 : C'est fait pour !
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2007, 22h59   #3
Membre confirmé
 
Inscription : avril 2007
Messages : 313
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 313
Points : 243
Points : 243
Bonjour,

L'autoincrement n'est pas toujours souhaitable pour plusieurs raisons, notamment qu'une suppression d'enregistrement fait qu'on perd la référence dans le champ autoincrémenté. Le numéro effacé devient irrécupérable. C'est parfois gênant, surtout sur des tables qui grossissent vite et qu'il faut maintenir en faisant de l'effacement/archivage, puis de la récupération d'identifiant pour les récupérer.

L'idée, si le champ n'est pas en autoincrement, serait peut-être de récupérer la plus grande valeur du champ avec la fonction SQL MAX(), et d'y ajouter 1.
Code :
 SELECT MAX(Num_licencies) FROM licencies;
pour récupérer le plus grand identifiant, puis le traiter en PHP en l'incrémentant et l'affecter à $row.

Sinon, tu peux essayer ça, mais je ne suis pas sûr de mon coup:
$sql = "INSERT INTO licencies(Nom_licencies, Num_licencies, Prenom_licencies,club, path_photo, date_naissance) VALUES('$nom',MAX(Num_licencies)+1,'$prenom','$club','$path_photo','$date_naiss')";

Je ne suis pas sûr que l'on puisse utiliser MAX dans cette partie de la requête, je crois que c'est utilisable uniquement dans un SELECT (à vérifier), donc dans ce cas il faut passer par une première requête sélection comme je l'indiquais au début.

Sinon, sur un champ autoincrement, c'est très facile de récupérer le dernier numéro d'identifiant créé, grâce à la fonction SQL LAST_INSERT_ID()
Code :
 SELECT LAST_INSERT_ID();
*.Har(d)t est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2007, 23h14   #4
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
Citation:
L'idée, si le champ n'est pas en autoincrement, serait peut-être de récupérer la plus grande valeur du champ avec la fonction SQL MAX(), et d'y ajouter 1.
Code :
 SELECT MAX(Num_licencies) FROM licencies;
Attention :
En cas d'une insertion concurrente, tu n'es absolument pas certain d'envoyer le dernier id + 1

Citation:
Code :
 SELECT LAST_INSERT_ID();
Attention , ici c'est mysql_insert_id() à mettre de suite àprés ta requete INSERT :
Code :
1
2
 
$LastId = mysql_insert_id();
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2007, 23h19   #5
Invité de passage
 
Inscription : avril 2007
Messages : 22
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 22
Points : 4
Points : 4
Hard a très bien résumé ce que je voulais faire lauto increment c'est bien mais si je teste et que je supprime des champs bah il ne se remet jamais à 0 que dans ce cas t'es sur d'avoir le numéro suivant donc vous me conseillez quoi alors car le
Code :
SELECT max(Num_licencies)+1 FROM Licencies
ca ne fonctionne pas
en fait faudrait récupérer le résultat de cette requête puis lui ajouter 1 dans le INSERT maintenant je ne sais pas comment
klr54000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2007, 23h24   #6
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
si tu es en test et que tu veux remettre à 0 (c'est à dire vider la table),
utilise TRUNCATE TABLE matable
Le champ AUTOINCREMENT sera à nouveau à 0
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2007, 23h27   #7
Invité de passage
 
Inscription : avril 2007
Messages : 22
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 22
Points : 4
Points : 4
Citation:
Envoyé par N1bus
si tu es en test et que tu veux remettre à 0 (c'est à dire vider la table),
utilise TRUNCATE TABLE matable
Le champ AUTOINCREMENT sera à nouveau à 0
Oui ca c'est sur je peux le faire directement de MYSQL mais ce n'est pas le but recherché .
Je sais je ne fais pas dans le plus simple mais bon...
klr54000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2007, 23h45   #8
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
Citation:
si je teste et que je supprime des champs bah il ne se remet jamais à 0
Citation:
mais ce n'est pas le but recherché
Faudrait savoir.
Si tu remets ton champ ID à 0 c'est que ta table doit être vide.

C'est vrai que t'es en train de te compliquer la vie...
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2007, 00h07   #9
Membre confirmé
 
Inscription : avril 2007
Messages : 313
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 313
Points : 243
Points : 243
Citation:
Envoyé par klr54000
Code :
SELECT max(Num_licencies)+1 FROM Licencies
ca ne fonctionne pas
C'est quoi l'erreur retournée ?
*.Har(d)t est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2007, 00h13   #10
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
a mon avis l'erreur c'est le +1
Code :
1
2
 
SELECT max(Num_licencies)+1 ...
ceci devrait marcher
Code :
 SELECT max(Num_licencies) FROM Licencies
Ensuite il suffit d'incrémenter la valeur retournée
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2007, 08h54   #11
Invité de passage
 
Inscription : avril 2007
Messages : 22
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 22
Points : 4
Points : 4
Citation:
Envoyé par N1bus
a mon avis l'erreur c'est le +1
Code :
1
2
 
SELECT max(Num_licencies)+1 ...
ceci devrait marcher
Code :
 SELECT max(Num_licencies) FROM Licencies
Ensuite il suffit d'incrémenter la valeur retournée
Oui d'accord mais comment récupérer le résultat de cette reqête
Code :
 SELECT max(Num_licencies) FROM Licencies
klr54000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2007, 15h34   #12
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
Code PHP :
1
2
3
4
5
6
7
 
$sql = "SELECT max(Num_licencies) FROM Licencies";
$res = mysql_query($sql);
 
$DernierNumero = mysql_result($res, 0, "Num_licencies");
 
$ProchainNumero = $DernierNumero++;
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h14.


 
 
 
 
Partenaires

Hébergement Web