Récupérer l'id courant

11 réponses
AuteurMessage

mirage |
Modérateur

Photo de mirage

Inscrit le : 04/05/2005

# Le 07/04/2006 à 09:53

Bonjour,

Je voulais savoir si il était possible, via php et mySQL, de récupérer l'id courant de l'auto_increment lors d'une requête.

Je m'explique, j'ai une table dans lequel j'ai id (auto_increment) et id_t. Je voudrais, lors de l'exécution de la requête, que id_t prenne la valeur de id.

Actuellement, je passe via mysql_insert_id et je fais un update ensuite mais si il avait moyen d'économiser ces requêtes pas franchement utiles, ça serait bien . J'ai aussi regardé du côté de la doc mySQL et je suis tombé sur LAST_INSERT_id()Ouvrir dans une nouvelle fenetre mais il ne me retourne pas la valeur courante (je m'en doutais) mais la valeur de l'insert précédent la requête actuelle.

Y a-t-il une solution autre que de passer par mysql_insert_id et un update ?

tybozz | Thibaud
Membre

 

Inscrit le : 09/05/2005

# Le 07/04/2006 à 09:55

last_insert_id()+1 ?

Elevez un dragon !Ouvrir dans une nouvelle fenetre avant qu'il ne fasse le casting pour la star on the net academyOuvrir dans une nouvelle fenetre ou qu'il ne s'empiffre de bonbons à gogoOuvrir dans une nouvelle fenetre

Julgates | Julien
Administrateur

Photo de Julgates

Inscrit le : 09/03/2005

# Le 07/04/2006 à 09:55

LAST_INSERT_ID() + 1 ?

Sinon je pense que si tu passe par une requete précédente il peut y avoir un soucis si le même script est executé deux fois en parallèle, donc l'update semble le mieux finalement.

Edit : ok ça va tu m'as eu...

Shopping Time NetworkOuvrir dans une nouvelle fenetre - Founder / CTO

mirage | Vincent
Modérateur

Photo de mirage

Inscrit le : 04/05/2005

# Le 07/04/2006 à 09:56

Non car avant j'insère dans une autre table qui n'a aucun rapport

MathieuC | Mathieu
Modérateur

Photo de MathieuC

Inscrit le : 15/07/2005

# Le 07/04/2006 à 09:57

si dans ton insert tu fais :

INSERT INTO toto (id, texte, id_t) VALUES ('', 'toto', id);

ca ne marche pas ?

Je dis ca sans avoir essayé

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 07/04/2006 à 09:58

et... euh... question bete, pourquoi avoir deux champs avec la même valeur ? :S

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

mirage | Vincent
Modérateur

Photo de mirage

Inscrit le : 04/05/2005

# Le 07/04/2006 à 10:13

Non Telaxo, ça ne fonctionne pas.

Bool : c'est pour une messagerie interne, je stocke tout dans la même table mais je fais comme si c'était un forum (donc tous les messages en rapport avec un même sujet s'affichent sur la même page, c'est demandé par les visiteurs pour un meilleur suivi). Lors de l'enregistrement du premier message, id du message doit être le même que id_t et à chaque réponse, id_t reprend la valeur de l'id du premier message. Après avoir essayé pas mal de trucs, j'ai trouvé que c'était le moyen le plus pratique de gérer cela (et surtout pour éviter d'avoir 2 tables). C'est peut être pas super optimisé mais bon...

Julgates | Julien
Administrateur

Photo de Julgates

Inscrit le : 09/03/2005

# Le 07/04/2006 à 10:18

Dans nos forums on met pas l'id du message d'origine, justement on le laisse à 0, on sait que c'est lui l'origine...

Shopping Time NetworkOuvrir dans une nouvelle fenetre - Founder / CTO

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 07/04/2006 à 10:21

Bah pour ma part je préfère largement avoir deux tables bien distinctes pour ce genre de choses.... comme un forum quoi.

Parce que là en gros pour pouvoir afficher la liste des "topics", MySQL va devoir se tapper toute la liste des messages... les index c'est bien, mais ça ne fait pas tout.
Sans oublier les problèmes d'accès concurrents avec les tables MyISAM : à chaque fois que quelqu'un enverra un message ça va verrouiller toute la table, c'est à dire que pendant se laps de temps les utilisateurs ne pourront pas consulter la liste des conversations ou meme lire un message. Bien sûr un cache fichier coté PHP limitera les dégats, mais ce n'est pas une raison.

Finalement, l'idéal serait sûrement d'utiliser les transactions (via InnoDB). Au moins tu aurais ton ID comme tu le souhaites, et tu n'aurais aucun problème d'accès concurrent.

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

mirage | Vincent
Modérateur

Photo de mirage

Inscrit le : 04/05/2005

# Le 07/04/2006 à 10:33

Julgates a dit :
Dans nos forums on met pas l'id du message d'origine, justement on le laisse à 0, on sait que c'est lui l'origine...

Comment tu gères l'affichage alors ?

Je crois que je vais laisser ce que j'ai actuellement sinon je vais me compliquer la vie ! Merci à ceux qui ont répondu

Julgates | Julien
Administrateur

Photo de Julgates

Inscrit le : 09/03/2005

# Le 07/04/2006 à 11:01

REQUETE 1 (1 resultat) : récupères les données du message source (titre, message, auteur, lié avec le dossier etc)
REQUETE 2 (X résultats) : récupères les messages fils qui eux n'ont pas besoin de connaitre le dossier, ni le titre etc

Shopping Time NetworkOuvrir dans une nouvelle fenetre - Founder / CTO

Geo 113 | Geoffrey
Modérateur

Photo de Geo 113

Inscrit le : 04/05/2005

# Le 07/04/2006 à 11:44

oui mais il y a une référence commune entre messages père et fils

CosmixOuvrir dans une nouvelle fenetre
Rendez imprévisible l'Economie; Mentez aux sondages

Répondre

Vous ne pouvez pas participer au forum, car votre inscription n'a pas été validée. Pour vous faire valider en tant que Membre, cliquez ici.

© MHN - Tous droits réservés | CNIL N°844440 | 24/11/2024 3:47:03 | Généré en 13.18ms | Contacts | Mentions légales |