Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 13 sur 13
  1. #1
    Futur Membre du Club
    Femme Profil pro
    Intégratrice Web
    Inscrit en
    mai 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    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 : 15
    Points
    15

    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 :
    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 Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 773
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    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 : 13 773
    Points : 22 995
    Points
    22 995

    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 :
    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 de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « 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
    Futur Membre du Club
    Femme Profil pro
    Intégratrice Web
    Inscrit en
    mai 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    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 : 15
    Points
    15

    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 :
    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 :
    {$last_customer->id_customer}
    il me renvoi rien

  4. #4
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 773
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    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 : 13 773
    Points : 22 995
    Points
    22 995

    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 de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « 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
    Futur Membre du Club
    Femme Profil pro
    Intégratrice Web
    Inscrit en
    mai 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    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 : 15
    Points
    15

    Par défaut

    Voici ma requête :
    Code sql :
    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 Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 773
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    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 : 13 773
    Points : 22 995
    Points
    22 995

    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 :
    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 de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « 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
    Futur Membre du Club
    Femme Profil pro
    Intégratrice Web
    Inscrit en
    mai 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    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 : 15
    Points
    15

    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 :
    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 Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 773
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    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 : 13 773
    Points : 22 995
    Points
    22 995

    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 de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « 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
    Futur Membre du Club
    Femme Profil pro
    Intégratrice Web
    Inscrit en
    mai 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    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 : 15
    Points
    15

    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 :
    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 :
    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 : 117
    Points
    117

    Par défaut

    Alors avez-vous réussi à afficher votre dernier enregistrement?

  11. #11
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 773
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    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 : 13 773
    Points : 22 995
    Points
    22 995

    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 :
    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 :
    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 de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « 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
    Futur Membre du Club
    Femme Profil pro
    Intégratrice Web
    Inscrit en
    mai 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    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 : 15
    Points
    15

    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 Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2012
    Messages
    763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2012
    Messages : 763
    Points : 1 230
    Points
    1 230

    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 :
    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.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •