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 :

Sélectionner le dernier enregistrement de ma table [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Intégratrice Web
    Inscrit en
    Mai 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Intégratrice Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 64
    Points : 34
    Points
    34
    Par défaut Sélectionner le dernier enregistrement de ma table
    Bonjour

    J'ai recherché sur le forum et sur gg une solution mais il n'y a rien qui fonctionne...

    Je veux récupérer le dernier enregistrement d'une table. La solution qui m'affiche quelque chose est :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT MAX(a.id) AS id, a.id_auction, a.id_customer, a.price, a.date
    FROM ps_invertus_auction_blind a

    Seulement ça m'affiche le bon id (le dernier) mais le reste des infos ne sont pas bonnes (il s'agit de la première ligne)...

    Je n'ai peut-être pas tout compris à l'utilisation de cette requête
    Merci d'avance

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Tu mélanges une fonction de groupage (MAX) avec des colonnes sans groupage et sans GROUP BY dans la requête. Du coup, comme MySQL est mauvais et accepte cette requête alors qu'elle est fausse, il donne des résultats faux !
    Pour en savoir plus, un petit cours de SQLPro.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT id, id_auction, id_customer, price, `date`
    FROM ps_invertus_auction_blind
    WHERE id = 
    (
    	SELECT MAX(id)
    	FROM ps_invertus_auction_blind
    )

    Au passage, remarque aussi que j'ai entouré la colonne mal nommée 'date' par des apostrophes inversées car date est un mot réservé du langage SQL.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Intégratrice Web
    Inscrit en
    Mai 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Intégratrice Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 64
    Points : 34
    Points
    34
    Par défaut
    Ok, merci.
    J'avais pourtant trouvée cette requête sur le forum et qui devait permettre de récupérer le dernier enregistrement de la base...


    Par contre, mon var_dump me donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(1) { [0]=> array(1) { ["id_customer"]=> string(2) "26" } }
    Comment je fais pour accéder au 2ème tableau (sachant que je suis sous Presta et donc Smarty)

    Avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {$last_customer->id_customer}
    il me renvoi rien

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Commence par donner ta vraie requête.

    Ensuite, "Presta et donc Smarty", moi pas connaître et on sort du forum MySQL pour aller dans PHP&MySQL. C'est de l'exploitation et de la présentation des données retournées par la requête, ce n'est plus du SQL.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Intégratrice Web
    Inscrit en
    Mai 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Intégratrice Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 64
    Points : 34
    Points
    34
    Par défaut
    Voici ma requête :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT a.id_customer
    FROM ps_invertus_auction_blind a
    WHERE a.id = (
    	SELECT MAX(a.id)
    	FROM ps_invertus_auction_blind a
    )


    Citation Envoyé par CinePhil Voir le message
    Ensuite, "Presta et donc Smarty", moi pas connaître et on sort du forum MySQL pour aller dans PHP&MySQL. C'est de l'exploitation et de la présentation des données retournées par la requête, ce n'est plus du SQL.
    Je parle de Prestashop. Je vais poser la question sur leur forum.

    Merci pour ton aide !

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    C'est bien ce que je pensais : comme tu ne sélectionnes que a.id_customer, ton var_dump ne retourne que id_customer ; normal !

    Regarde ma requête :
    Citation Envoyé par CinéPhil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT id, id_auction, id_customer, price, `date`
    FROM ps_invertus_auction_blind
    WHERE id = 
    (
    	SELECT MAX(id)
    	FROM ps_invertus_auction_blind
    )
    Un var_dump sur le résultat de cette requête donnera toutes les colonnes du SELECT.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Intégratrice Web
    Inscrit en
    Mai 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Intégratrice Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 64
    Points : 34
    Points
    34
    Par défaut
    Oui, désolée je n'ai pas précisé, c'est fait exprès, je n'ai besoin que du id_customer (les autres c'était pour vérifié si ma requête fonctionnait).

    Ce que je trouvais bizarre, c'est que mon var_dump me renvoi un tableau dans un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(1) { [0]=> array(1) { ["id_customer"]=> string(2) "26" } }
    Cela est dû à la requête imbriqué ?

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Donne l'ensemble du code PHP qui lance la requête et jusqu'au var_dump.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Intégratrice Web
    Inscrit en
    Mai 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Intégratrice Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 64
    Points : 34
    Points
    34
    Par défaut
    C'est un peu différent du php normal car on est en mvc. J'ai trouvé la réponse sur le forum de Prestashop, il faut faire un foreach.
    Voici l'ensemble de mon code :

    Dans le .php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $last_customer = Db::getInstance()->ExecuteS('
    	SELECT a.id_customer
    	FROM ps_invertus_auction_blind a
    	WHERE a.id = (
    		SELECT MAX(a.id)
    		FROM ps_invertus_auction_blind a
    	)
    '); //Requête pour récupérer les valeurs voulu
    $smarty->assign('last_customer', $last_customer); //on envoi le résultat vers le code html
    Dans le template (code html) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {$last_customer|@var_dump} donne : array(1) { [0]=> array(1) { ["id_customer"]=> string(2) "26" } }
     
    {foreach from=$last_customer item="last_cust"} <!--Faire un foreach pour accéder au contenu du deuxième tableau-->		
    	{$last_cust.id_customer} <!--Affiche l'id du client en cours-->
    {/foreach}

    PS : par contre, je n'ai toujours pas compris pourquoi il y avait 2 tableaux imbriqué

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 102
    Points : 142
    Points
    142
    Par défaut
    Alors avez-vous réussi à afficher votre dernier enregistrement?

  11. #11
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Je ne sais pas comment ça fonctionne sous Smarty/prestashop mais en PHP classique, le résultat de mysql_query est un tableau de tableaux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $sql = "
    	SELECT a.id_customer
    	FROM ps_invertus_auction_blind a
    	WHERE a.id = (
    		SELECT MAX(a.id)
    		FROM ps_invertus_auction_blind a
    	)
    ";
    $result = mysql_query($sql);
     
    var_dump($result);
    Le var_dump donnera un truc de ce genre :
    array(1) { [0] => array(2) {[0] => string(2) "26", ["id_customer"] => string(2) "26"}}
    Le premier array contient les lignes de résultat de la requête.
    Le second array à l'intérieur du premier contient le détail de chaque ligne, exprimée par un indice numérique classique de 0 à n + un indice par nom de colonne de résultat de la requête.

    Ensuite on fait un mysql_fetch_array pour extraire chaque ligne de résultat, soit dans une boucle while si la requête retourne plus d'une ligne, soit simple si elle n'en retourne qu'une, ce qui est le cas ici.

    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
    $sql = "
    	SELECT a.id_customer
    	FROM ps_invertus_auction_blind a
    	WHERE a.id = (
    		SELECT MAX(a.id)
    		FROM ps_invertus_auction_blind a
    	)
    ";
    $result = mysql_query($sql);
     
    var_dump($result);
     
    $row = mysql_fetch_array($result);
     
    $id_customer = $row['id_customer'];
     
    var_dump($id_customer);
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  12. #12
    Nouveau membre du Club
    Femme Profil pro
    Intégratrice Web
    Inscrit en
    Mai 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Intégratrice Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 64
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par Tsoko Voir le message
    Alors avez-vous réussi à afficher votre dernier enregistrement?
    Oui, il fallait faire un foreach. Ce qui doit revenir à ce que dit CinePhil :

    Citation Envoyé par CinePhil Voir le message
    Ensuite on fait un mysql_fetch_array pour extraire chaque ligne de résultat, soit dans une boucle while si la requête retourne plus d'une ligne, soit simple si elle n'en retourne qu'une, ce qui est le cas ici.
    Merci de ton aide CinePhil, j'ai compris pourquoi il y avait 2 tableaux ^^

  13. #13
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    Bonjour,

    la fonction mysql_query() renvoi une ressource qui n'est PAS exploitable directement,

    pour pouvoir exploiter le résultat de mysql_query() il faut obligatoirement utiliser la fonction mysql_fetch_***() (fetch_array(), fetch_row, ... selon le besoin),

    le résultat que vous avez(tableau avec chaque ligne de résultat dans un sous-niveau du tableau) est similaire à ce que la fonction PDO fetchAll() renvoi,

    cette fonction n'est pas disponible avec l'API mysql_ cepandant il suffit que la fonction Db::getInstance()->ExecuteS() que vous utilisez imite cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //Le code de la fonction ExecuteS()
    //Récupération de la requete, execution, parcour du résult
     
    while ($row = mysql_fetch_assoc($result)){
        $all[] = $row;
    }
     
    return $all;
    pour vous retrouver avec un tableau avec un sous-tableau pour chaque ligne de résultat de votre requête.
    une réponse vous a permis d'avancer ?

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

Discussions similaires

  1. PB Sélectionner le dernier enregistrement
    Par lionelvz dans le forum Access
    Réponses: 23
    Dernier message: 16/06/2006, 17h29
  2. comment rechercher les derniers enregistrement d'une table ?
    Par hornetboy dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/09/2005, 10h13
  3. Récupérer dernier enregistrement d'une table?
    Par Invité dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 19/01/2004, 12h38
  4. Réponses: 10
    Dernier message: 01/08/2003, 14h45
  5. Trouver le dernier enregistrement d'une table
    Par remi59 dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/03/2003, 15h54

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