Requete GROUP BY

Résolu
rissoux Messages postés 12 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 13 octobre 2014 - 7 nov. 2005 à 22:56
rissoux Messages postés 12 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 13 octobre 2014 - 8 nov. 2005 à 18:10
Bonjour,
J'ai fait un site album photos, les photos sont classées par catégories et sous-catégories.
Je voudrais que lorsque l'on arrive sur la page catégorie il y ai la dernière photo enregistrée de chaque sous catégorie qui s'affiche.
J'ai fait :
$query "SELECT * FROM photos WHERE Cat'Voyages' GROUP BY SCat DESC ";

Ou encore :
$query "SELECT MAX(ID),Cat,SCat,Img FROM photos WHERE Cat'Voyages' GROUP BY SCat DESC ";

Mais c'est toujours la première photo enregistrée et non la dernière qui s'affiche.

Est-ce que quelqu'un peut m'éclairer sur mon erreur ?

Merci.

9 réponses

monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
8 nov. 2005 à 13:47
Bon j'avais pas le temps d'y réflechir car j'étais au boulot. Mais de
toute façon, dans une même catégorie, je suppose que tu vas vouloir
lister les sous categories. Ce qui implique une requête de ce type :

$query = 'SELECT id,nom FROM categorie WHERE id_parent='.$id_categorie_actuelle.' ORDER BY nom ASC' ;



Et dans tous les cas tu devras faire une boucle pour afficher tes catégories.

Donc dans la boucle tu devra mettre :

$query 'SELECT url FROM photos WHERE id_cat '.$data['id'].' ORDER BY date DESC LIMIT 1' ;



Bon ce qui est embêtant c'est que ça fait une requête par catégorie... Mais je ne sais pas si on peut faire mieux...
3
cs_sjon Messages postés 861 Date d'inscription mardi 26 mars 2002 Statut Membre Dernière intervention 29 novembre 2006 1
8 nov. 2005 à 00:45
Sael og blesud



BY ORDER ASD ... ;-)

Bon courage ...

NB : Si la réponse vous convient merci de l'accepter pour fermer ce thread ...


Sigurjón Bírgir Sigurðssón aka Sjón
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
8 nov. 2005 à 01:22
asc plutot non ?
0
cs_sjon Messages postés 861 Date d'inscription mardi 26 mars 2002 Statut Membre Dernière intervention 29 novembre 2006 1
8 nov. 2005 à 07:52
Sael og blesud



C'est sûr ... Lol ... ;-)

Bon courage ...

NB : Si la réponse vous convient merci de l'accepter pour fermer ce thread ...

Sigurjón Bírgir Sigurðssón aka Sjón
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
8 nov. 2005 à 09:42
Moi personnellement je ferai (oui c'est au futur et non au conditionnel, je vais refaire ma galerie ;p) :

table categories :

- id

- nom

- description



table images :

- id

- id_cat

- url

- titre

- auteur

- descriptions

- date







et ma requête :

$query = ' SELECT nom, date FROM images ' ; // Les champs que je
vais utiliser. je ne récupère pas url, car j'affiche les miniature
correspondantes qui sont de la forme /minis/[id].jpg

$query.' WHERE id_cat '.$id_categorie ; // Pour bien sélectionner uniquement les image d'une catégorie

$query.= ' ORDER BY date DESC '; // Ordonner du plus récent au plus vieux

$query.= ' LIMIT 1 '; // Prendre le premier résultat uniquement
0
rissoux Messages postés 12 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 13 octobre 2014
8 nov. 2005 à 10:13
Salut, et merci d'avoir répondu aussi rapidement,

Mon problème c'est que je n'ai pas que des catégories.

Dans mon album, j' ai 3 pages : Voyages, Famille, Divers.
Dans ces 3 pages les sous-catégories se crées au fur et à mesure.
Exemple :
Dans Voyages il y aura un sous-menu :
- Bretagne
- Camargue
- etc... quand j'ajouterai des photos d'un autre voyage...

Quand j'arrive sur Voyages je voudrais que la dernière photo de chaque sous-catégories s'affiche.
Avec ma requete, si je mets un ORDER BY, c'est le résultat de ma requete qui est classé, et je ne vois pas comment demander un classement à l'intèrieur de la sous-catégorie ?

J'arrive à ce résultat en faisant :
$query "SELECT DISTINCT SCat FROM photos WHERE Cat'Voyages' ORDER BY ID DESC";
$res = mysql_query($query) or die($query.'
'.mysql_error());
$nombre = mysql_num_rows($res);
while ($row = mysql_fetch_array($res,MYSQL_ASSOC))
{
$scat = $row['SCat']; $qr "SELECT * FROM photos WHERE Cat'Voyages' AND SCat ='$scat' ORDER BY ID DESC LIMIT 1";

Mais j'aurais aimé pouvoir le faire en une seule requete !!!

Ce doit bien être possible.
0
monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
8 nov. 2005 à 11:06
Personnellement, je pense que ta table, telle que je l'apeçois à travers tes requêtes, n'est pas très bien conçue.

J'ai l'impression qu'a chaque photo, tu es obligé de répéter le nom de la catégorie et de la sous-catégorie d'appartenance.
Et ça, vois-tu, c'est une grosse erreur de structure. Normalement, il NE DOIT PAS y avoir de répétition de données dans un base de données!

Je te conseil de faire quelque chose de ce genre :
table catégories :
- id (PRIMARY KEY, auto_increment)
- id_parent
- nom

table photos :
- id
- id_cat
- nom
- url
- etc...

Ainsi, tu ne répète qu'un petit nombre (id dans table catégorie <=> id_cat dans table photos) et c'est beaucoup plus simple.
Pour la hierarchie entre catégories, elle est représentée par id_parent qui est égale à 0 si c'est une catégorie de base, et égale à l'id de la catégorie si c'est une sous-catégorie.

Par contre, il ne me semble pas possible de tout faire en une seule requête... (Mais je peux me tromper =) )
0
rissoux Messages postés 12 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 13 octobre 2014
8 nov. 2005 à 13:37
Merci monoceros01, et je suis tout à fait d'accord avec toi, j'aurais dû faire 2 tables, mais j'ai fait ça dans l'urgence et ma table ne contient que 5 champs.
A présent j'ai le temps et je vai tout reprendre.

Je pense moi aussi que je n'arriverai pas à faire une seule requête et c'est bien dommage ! ;-)
0
rissoux Messages postés 12 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 13 octobre 2014
8 nov. 2005 à 18:10
Ce que j'ai fait fonctionne très bien aussi :
$query "SELECT DISTINCT SCat FROM photos WHERE Cat'Voyages' ORDER BY ID DESC";
$res = mysql_query($query) or die($query.'
'.mysql_error());
$nombre = mysql_num_rows($res);
while ($row = mysql_fetch_array($res,MYSQL_ASSOC))
{
$scat = $row['SCat']; $qr "SELECT * FROM photos WHERE Cat'Voyages' AND SCat ='$scat' ORDER BY ID DESC LIMIT 1";

J'utilise un while, mais ça revient au même, je crois que je vai en rester là. Mais j'aime bien chercher donc ....

Merci encore de ton aide
0
Rejoignez-nous