rissoux
Messages postés12Date d'inscriptionvendredi 19 mars 2004StatutMembreDernière intervention13 octobre 2014
-
7 nov. 2005 à 22:56
rissoux
Messages postés12Date d'inscriptionvendredi 19 mars 2004StatutMembreDernière intervention13 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 ?
monoceros01
Messages postés420Date d'inscriptionvendredi 28 novembre 2003StatutMembreDernière intervention20 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...
monoceros01
Messages postés420Date d'inscriptionvendredi 28 novembre 2003StatutMembreDernière intervention20 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
rissoux
Messages postés12Date d'inscriptionvendredi 19 mars 2004StatutMembreDernière intervention13 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 !!!
monoceros01
Messages postés420Date d'inscriptionvendredi 28 novembre 2003StatutMembreDernière intervention20 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 =) )
rissoux
Messages postés12Date d'inscriptionvendredi 19 mars 2004StatutMembreDernière intervention13 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 ! ;-)
rissoux
Messages postés12Date d'inscriptionvendredi 19 mars 2004StatutMembreDernière intervention13 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 ....