Précédent   Forum du club des développeurs et IT Pro > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 07/01/2013, 17h03   #1
the_tiger85
Futur Membre du Club
 
Femme
Intégratrice Web
Inscription : mai 2007
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Finistère (Bretagne)

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

Informations forums :
Inscription : mai 2007
Messages : 54
Points : 16
Points : 16
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
the_tiger85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 18h22   #2
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
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 659
Points : 25 561
Points : 25 561
Envoyer un message via MSN à CinePhil
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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/01/2013, 09h45   #3
the_tiger85
Futur Membre du Club
 
Femme
Intégratrice Web
Inscription : mai 2007
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Finistère (Bretagne)

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

Informations forums :
Inscription : mai 2007
Messages : 54
Points : 16
Points : 16
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
the_tiger85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 09h59   #4
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
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 659
Points : 25 561
Points : 25 561
Envoyer un message via MSN à CinePhil
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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 10h04   #5
the_tiger85
Futur Membre du Club
 
Femme
Intégratrice Web
Inscription : mai 2007
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Finistère (Bretagne)

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

Informations forums :
Inscription : mai 2007
Messages : 54
Points : 16
Points : 16
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 !
the_tiger85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 10h08   #6
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
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 659
Points : 25 561
Points : 25 561
Envoyer un message via MSN à CinePhil
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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 10h11   #7
the_tiger85
Futur Membre du Club
 
Femme
Intégratrice Web
Inscription : mai 2007
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Finistère (Bretagne)

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

Informations forums :
Inscription : mai 2007
Messages : 54
Points : 16
Points : 16
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é ?
the_tiger85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 10h22   #8
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
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 659
Points : 25 561
Points : 25 561
Envoyer un message via MSN à CinePhil
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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 10h30   #9
the_tiger85
Futur Membre du Club
 
Femme
Intégratrice Web
Inscription : mai 2007
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Finistère (Bretagne)

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

Informations forums :
Inscription : mai 2007
Messages : 54
Points : 16
Points : 16
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é
the_tiger85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 10h41   #10
Tsoko
Membre habitué
 
Avatar de Tsoko
 
Inscription : septembre 2006
Messages : 101
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : septembre 2006
Messages : 101
Points : 123
Points : 123
Alors avez-vous réussi à afficher votre dernier enregistrement?
__________________
Besoin d'un prestataire? creation site web
Tsoko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 10h47   #11
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
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 659
Points : 25 561
Points : 25 561
Envoyer un message via MSN à CinePhil
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 :
Citation:
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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/01/2013, 10h54   #12
the_tiger85
Futur Membre du Club
 
Femme
Intégratrice Web
Inscription : mai 2007
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Finistère (Bretagne)

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

Informations forums :
Inscription : mai 2007
Messages : 54
Points : 16
Points : 16
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 ^^
the_tiger85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 11h02   #13
Exia93
Membre Expert
 
Homme
Étudiant
Inscription : avril 2012
Messages : 609
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2012
Messages : 609
Points : 1 064
Points : 1 064
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.
Exia93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 17h45.


 
 
 
 
Partenaires

Hébergement Web