IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Affichage des résultats du sondage: Quelle fonction préférez-vous pour récupérer le dernier enrégistrement?

Votants
5. Vous ne pouvez pas participer à ce sondage.
  • mysql_insert_id()

    3 60,00%
  • mysql_query("SELECT LAST_INSERT_ID()");

    1 20,00%
  • "SELECT * FROM `matable` ORDER BY num_id DESC LIMIT 1"

    1 20,00%
Requêtes MySQL Discussion :

Utiliser mysql_insert_id(), LAST_INSERT_ID(), ou DESC LIMIT 1 ?


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Par défaut Utiliser mysql_insert_id(), LAST_INSERT_ID(), ou DESC LIMIT 1 ?
    Bonjour tout le monde,

    J'ai crée une base de données qui doit générer automatiquement le nom de l'image qu'on inserre. Ma première idée était de le faire à partir de la date heure et seconde de l'insertion. Voici l'exemple du code:

    $valdate =(date('dmy'));
    $valheure = (date('Hms'));
    $valext = ".jpg";
    $nomimage = $valdate.$valheure.$valext;


    L'heure est souvent fausse, ce qui finalement génère pas un nom unique.

    La deuxième solution, c'est de créer un champ avec type auto_incrément.
    Ce qui reste à faire, c'est de récupérer le dernier résultat et l'incrémenter. Exple:

    $nombre = (mysql_insert_id())+1;


    ou $nombre = (mysql_query("SELECT LAST_INSERT_ID()"))+1;

    ou encore utiliser cette formule : "SELECT * FROM `matable` ORDER BY num_id DESC LIMIT 1" et icrémenter la valeur.

    Quelle est selon vous la solution la plus fiable entre :
    1. Mysql_insert
    2. last_insert_id
    3 unm_ID DESC LIMIT 1 ?

    D'avance je vous remercie BCP

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par défaut
    mysql_insert_id et LAST_INSERT_ID sont la même chose, sauf que le premier évite une requête et les temps de transfert inhérents.

    quant à SELECT MAX + 1, il peut donner un mauvais résultat en cas d'insertions concurrentes.

  3. #3
    Membre éclairé Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Par défaut
    Citation Envoyé par Antoun
    mysql_insert_id et LAST_INSERT_ID sont la même chose, sauf que le premier évite une requête et les temps de transfert inhérents.

    quant à SELECT MAX + 1, il peut donner un mauvais résultat en cas d'insertions concurrentes.
    Merci bcp Antoun.
    Cependant, pourriez-vous donner un exemple concret?

    Que pensez-vous de ce code?

    $myQuery = "SELECT * FROM clients";
    $myRecord = mysql_insert_id($myQuery, $idConnex)or die("Erreur lors du traitement");
    $myRow = mysql_fetch_assoc($myRecord);
    $nombre = mysql_num_rows($myRecord);
    $nbID = $nombre + 1;

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par défaut
    Citation Envoyé par Alexandrebox
    Merci bcp Antoun.
    Cependant, pourriez-vous donner un exemple concret?
    OK, supposons que tes ID s'arrêtent à 50. J'ajoute un nouveau client ; dans une sessions concurrente, tu ajoutes un autre nouveau client avant que je n'ai pu faire mon SELECT MAX. Quand je fais maintenant mon SELECT MAX, j'obtiens l'ID du client que tu viens d'ajouter, et non celle de mon client.

    Citation Envoyé par Alexandrebox
    Que pensez-vous de ce code?

    $myQuery = "SELECT * FROM clients";
    $myRecord = mysql_insert_id($myQuery, $idConnex)or die("Erreur lors du traitement");
    // il faut appeler mysql_insert_id juste après une insertion, et non après un SELECT
    $myRow = mysql_fetch_assoc($myRecord);
    $nombre = mysql_num_rows($myRecord);
    // ça te donne le nb de clients, mais pas l'ID du dernier (il peut en effet y avoir eu des suppressions)
    $nbID = $nombre + 1;
    // à quoi te sert cette variable ?

  5. #5
    Membre éclairé Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Par défaut
    Avant chaque insertion, j'ai besoin du dernier enregistrement pour pouvoir l'incrémenter et l'inserer de nouveau. S'il faut à chaque insertion faire la fonction Mysql_insert(id), là ça devient compliqué. et refaire la même fonction pour la sélection... Je ne comprends pas. Pourras-tu stp me faire un exemple

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par défaut
    tu n'as pas besoin de connaître l'ID avant (et aucun moyen fiable de la prédire). Tu fais ton insertion, MySQL attribue l'ID, et tu la récupères avec mysql_insert_id.

    Poum l'exemple, cf la doc PHP de mysql_insert_id.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL-5.5] Utilisation de LAST_INSERT_ID()
    Par f3prst dans le forum Requêtes
    Réponses: 0
    Dernier message: 03/06/2013, 14h51
  2. [MySQL] présenter une requête avec ORDER BY id DESC LIMIT
    Par kogoi dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 17/11/2011, 18h18
  3. utilisation de la STL pour limiter ma boucle for
    Par salseropom dans le forum C++
    Réponses: 5
    Dernier message: 06/02/2010, 14h03
  4. Réponses: 4
    Dernier message: 15/07/2008, 16h22
  5. [MySQL] Utiliser la valeur d'un limit présent dans une table
    Par gwena54 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/07/2007, 21h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo