Précédent   Forum des professionnels en informatique > 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 Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/04/2011, 10h35   #1
Nouveau Membre du Club
 
Inscription : juillet 2008
Messages : 138
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 138
Points : 29
Points : 29
Par défaut GROUP BY avec ORDER BY et LIMIT ?

Bonjour à tous,

Je dispose de la base de données suivante :

Code :
1
2
3
4
5
ID | Nom  | Ville | Date
01 | john | paris | 18/05/10
02 | nico | lyon  | 16/05/10
03 | nico | paris | 15/05/10
04 | john | lyon  | 15/05/10
La date n'est qu'un exemple, pour la compréhension, en fait il s'agit d'un timestamp.


Je cherche à afficher, a l'aide d'un while le résultat suivant :


John à paris le 18/05/10
Nico à Lyon le 16/05/10


Autrement dit, la dernière ville visitée par personne.

Merci d'avance pour votre aide

-Vincent
vinze60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 16h02   #2
Membre éprouvé
 
Homme Gaetan
Webmaster
Inscription : janvier 2007
Messages : 386
Détails du profil
Informations personnelles :
Nom : Homme Gaetan
Âge : 40
Localisation : France

Informations professionnelles :
Activité : Webmaster
Secteur : Biens de consommation

Informations forums :
Inscription : janvier 2007
Messages : 386
Points : 441
Points : 441
Envoyer un message via MSN à Gaetan_
Par exemple :

Code :
1
2
3
4
5
6
7
<?php
$marequete = mysql_query("SELECT Nom, Ville, Date FROM tatable ORDER BY Date desc LIMIT 10");
while ($r= mysql_fetch_row($marequete)) 
{
echo $r[0].' à '.$r[1].' le '.$r[2].'<br>';
}
?>
Gaetan_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 16h12   #3
Membre éprouvé
 
Homme Gaetan
Webmaster
Inscription : janvier 2007
Messages : 386
Détails du profil
Informations personnelles :
Nom : Homme Gaetan
Âge : 40
Localisation : France

Informations professionnelles :
Activité : Webmaster
Secteur : Biens de consommation

Informations forums :
Inscription : janvier 2007
Messages : 386
Points : 441
Points : 441
Envoyer un message via MSN à Gaetan_
Ops le timestamp :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$marequete = mysql_query("SELECT Nom, Ville, Date FROM tatable ORDER BY Date desc LIMIT 10");
while ($r= mysql_fetch_row($marequete)) 
{
$date = date("Y-m-d", $r[2]);
// et pour le formatage de ta date avec l'année en YY :
$da=explode("-",$date);
$year= substr($da[0], 2, 4);
$date = "$da[2]/$da[1]/$year";
 
echo $r[0].' à '.$r[1].' le '.$date.'<br>';
}
?>
Gaetan_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 16h25   #4
Nouveau Membre du Club
 
Inscription : juillet 2008
Messages : 138
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 138
Points : 29
Points : 29
Merci pour ta réponse !

Effectivement oui, si je fais ça je vais avoir (selon mon exemple) 4 résultats :

John à paris le 18/05/10
Nico à Lyon le 16/05/10
nico à paris le 15/05/10
john à lyon le 15/05/10


Mais ce n'est pas ce que je recherche. Ce n'est pas le format date qui me pose problème mais le tri et le nombre de résultats.

Je souhaiterais avoir uniquement, par personne, la dernière date de visite d'une ville.

Par exemple, si john et nico vont toutes les jours dans une ville différente le resultat me donnera que :

John à paris le 18/05/10
Nico à Lyon le 16/05/10
vinze60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 16h43   #5
Membre éprouvé
 
Homme Gaetan
Webmaster
Inscription : janvier 2007
Messages : 386
Détails du profil
Informations personnelles :
Nom : Homme Gaetan
Âge : 40
Localisation : France

Informations professionnelles :
Activité : Webmaster
Secteur : Biens de consommation

Informations forums :
Inscription : janvier 2007
Messages : 386
Points : 441
Points : 441
Envoyer un message via MSN à Gaetan_
Code :
SELECT Nom, Ville, Date FROM tatable GROUP BY ID ORDER BY Date desc LIMIT ...
Gaetan_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/04/2011, 16h59   #6
Nouveau Membre du Club
 
Inscription : juillet 2008
Messages : 138
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 138
Points : 29
Points : 29
Super, alors ça je crois bien que ça fonctionne merci

Par contre... comment faire pour trier le résultat final ? Par exemple :

John à paris le 18/05/10
Nico à Lyon le 16/05/10
marc à caen le 15/05/10
eddy à lens le 14/05/10
vinze60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 17h12   #7
Membre éprouvé
 
Homme Gaetan
Webmaster
Inscription : janvier 2007
Messages : 386
Détails du profil
Informations personnelles :
Nom : Homme Gaetan
Âge : 40
Localisation : France

Informations professionnelles :
Activité : Webmaster
Secteur : Biens de consommation

Informations forums :
Inscription : janvier 2007
Messages : 386
Points : 441
Points : 441
Envoyer un message via MSN à Gaetan_
Suivant quel critère ?
Là c'est par date décroissante.
Citation:
ORDER BY Date desc
Gaetan_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 21h02   #8
Nouveau Membre du Club
 
Inscription : juillet 2008
Messages : 138
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 138
Points : 29
Points : 29
Salut,

Je crois que j'ai un peu de mal à me faire comprendre ! Hihi

Là, actuellement, avec la solution que tu m'as donné, j'ai bien le nom de la derniere ville que toutes mes personnes ont visité. Ca, ok.

Avec ceci j'obtiens une liste avec les bonnes données mais je n'arrive pas à la trier cette liste. Que ce soit ASC ou DESC.
vinze60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 09h47   #9
Membre éprouvé
 
Homme Gaetan
Webmaster
Inscription : janvier 2007
Messages : 386
Détails du profil
Informations personnelles :
Nom : Homme Gaetan
Âge : 40
Localisation : France

Informations professionnelles :
Activité : Webmaster
Secteur : Biens de consommation

Informations forums :
Inscription : janvier 2007
Messages : 386
Points : 441
Points : 441
Envoyer un message via MSN à Gaetan_
Citation:
Suivant quel critère ?
Gaetan_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 10h47   #10
Nouveau Membre du Club
 
Inscription : juillet 2008
Messages : 138
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 138
Points : 29
Points : 29
Niarf

Le critère c'est la date.

Obtenir la dernière date de chaque personne ET trier ces personnes en fonction de la date

La actuellement, avec le


Code :
SELECT Nom, Ville, Date FROM tatable GROUP BY ID ORDER BY Date desc LIMIT 10

J'obtiens les bonnes données. Mais lors de mon While, la liste ne s'affiche pas dans l'ordre que je souhaite. C'est à dire par date DESC.
vinze60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2011, 10h23   #11
Nouveau Membre du Club
 
Inscription : juillet 2008
Messages : 138
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 138
Points : 29
Points : 29
Bon et bien je me suis débrouillé tout seul comme un grand garçon

Pour ceux qui auront le même problème voilà comment j'ai fais :

Code :
1
2
3
SELECT * FROM 
(SELECT * FROM table ORDER BY date DESC) AS table
GROUP BY table.nom ORDER BY table.date DESC LIMIT 10;
vinze60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h05.


 
 
 
 
Partenaires

Hébergement Web