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

PHP & Base de données Discussion :

Optimisation de requête SQL : récupération du dernier id [PDO]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 51
    Points : 30
    Points
    30
    Par défaut Optimisation de requête SQL : récupération du dernier id
    Hello,
    J'ai la requête suivante permettant de sélectionner le dernier ID. Je sais qu'il existe la fonction LastInsertID(), mais je n'arrive pas à récupérer le dernier ID.

    Pouvez vous m'aidez svp ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req2 = $pdo->prepare("SELECT id FROM point ORDER BY id DESC LIMIT 1 ");
                $req2->execute();

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    LastInsertID() renvoit le dernier id inseré durant la connexion en cours.

    Le dernier id tout court c'est, plus simplement :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX(id) FROM point
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    La question est peut-être de savoir pourquoi tu as besoin de récupérer le dernier id inséré.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    En fait je dois faire une insertion dans une autre table lorsque j'insere dans la tble d'avant,
    le code est "degeux" comme j'ai fais actuellement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     $req = $pdo->prepare("INSERT INTO point SET titre=?,idcategorie=?, traitement=?");
                $req->execute([$_POST['titre'],$_POST['idcategorie'],$_POST['traitement']]);
                var_dump($req);
                $req2 = $pdo->prepare("SELECT id FROM point ORDER BY id DESC LIMIT 1 ");
                $req2->execute();
                $req2fa = $req2->fetch();
                var_dump($req2fa);
                foreach ($req2fa as $r2fa){
                    $r2fa=intval($r2fa);
     
                    $req3 = $pdo->prepare("SELECT point.idcategorie, site.id FROM point,categorie, site, point_site,type_categorie,type_projet WHERE point.id=$r2fa AND categorie.id=type_categorie.idcategorie AND type_categorie.idtype=type_projet.id AND type_projet.id=site.type GROUP BY point.idcategorie");
                    $req3->execute();
                    $req3fa = $req3->fetchAll();
                    var_dump($req3fa);
                    foreach ($req3fa as $r3fa){
                        $r3fa=($r3fa->id);
                        $r3fa=intval($r3fa);
                        var_dump($r3fa);
                        $req4 = $pdo->prepare("INSERT INTO point_site SET idsite=?,idpoint=?");
                        $req4->execute([$r3fa,$r2fa]);
                        //$req4->execute();
                        var_dump($req4);
                    }
                }

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Là, c'est typiquement le cas où il faut utiliser lastInsertId :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $req = $pdo->prepare("INSERT INTO point SET titre=?,idcategorie=?, traitement=?");
    $req->execute([$_POST['titre'],$_POST['idcategorie'],$_POST['traitement']]);
    var_dump($req);
    $r2fa = $pdo->lastInsertId();
     
    $req3 = $pdo->prepare("SELECT point.idcategorie, site.id FROM point,categorie, site, point_site,type_categorie,type_projet WHERE point.id=$r2fa AND categorie.id=type_categorie.idcategorie AND type_categorie.idtype=type_projet.id AND type_projet.id=site.type GROUP BY point.idcategorie");
    $req3->execute();
    $req3fa = $req3->fetchAll();
    var_dump($req3fa);
    foreach ($req3fa as $r3fa){
    	$r3fa=($r3fa->id);
    	$r3fa=intval($r3fa);
    	var_dump($r3fa);
    	$req4 = $pdo->prepare("INSERT INTO point_site SET idsite=?,idpoint=?");
    	$req4->execute([$r3fa,$r2fa]);
    	//$req4->execute();
    	var_dump($req4);
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Merci beaucoup !!!

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    On peut vraiment, vraiment simplifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php 
    $req = $pdo->prepare("INSERT INTO point SET titre = ?, idcategorie = ?, traitement = ?");
    $req->execute([$_POST['titre'],$_POST['idcategorie'],$_POST['traitement']]);
    $point_id = $req->lastinsertid();
     
    $req_point_site = $pdo->query("SELECT site.id
    FROM point ON ?
    JOIN point_site ON ?
    JOIN categorie ON ?
    JOIN type_categorie ON categorie.id=type_categorie.idcategorie
    JOIN type_projet ON type_categorie.idtype=type_projet.id
    JOIN site type_projet.id=site.type
    WHERE point.id = $point_id");
    $row = $req_point_site->fetch(PDO::FETCH_ASSOC);
    $site_id = $row['id'];
     
    $req_insert_point = $pdo->prepare("INSERT INTO point_site SET idsite=?, idpoint=?");
    $req_insert_point->execute([$site_id ,$point_id]);
    Par contre on voit qu'il manque dans ta requête SELECT, les relations pour les tables point, point_site et categorie.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. [phpBB] Optimiser les requêtes SQL
    Par Jimalexp dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 22/09/2008, 07h33
  2. optimisation de requête SQL
    Par millien dans le forum SQL
    Réponses: 4
    Dernier message: 03/03/2008, 12h48
  3. Optimisation de requêtes SQL - utilisation de IN SELECT
    Par cfeltz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/12/2006, 09h28
  4. Réponses: 5
    Dernier message: 29/12/2005, 07h03
  5. Optimiser une requête SQL d'un moteur de recherche
    Par kibodio dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/03/2005, 20h55

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