casse tete avec mysql

Eléphant du PHP | 299 Messages

22 janv. 2010, 23:01

Salut a tous,

j' ai un casse-tete qui me turlure l' esprit.

J' essaie de faire un catalogue en ligne, pour l' instant, rien de compliqué a part une chose.

j' ai une table articles qui contient id, cat, sous-cat, sous-sous-cat.

J' aimerai pouvoir afficher sur mon site avec un retour d' une boucle les resultat du dernier article de chaque categorie.

J' arrive pas a trouver dans ma tete la bonne facon de faire ca.

J' aimerai faire en sorte que sur la page d' accueil apparaisse des mini-tableaux (ca c' est pas un souci) mais un pour chaque dernier article de chaque "cat"

Pas evident a expliquer.

Un peu comme sur pearl, mais sur pearl c' est pas compliqué les nom de cat et sous cat ne changent pas.

Moi j' essaie de faire un catalogue ou les gens ont juste a renseigner les identifiants mysql pour l' installer.

Le probleme est qu' ils créent eux memes leur cat et sous-cat, donc une personne peut creer un catalogue de vetements, un autre sur les voitures a vendre.

Donc ma requete prend la toute sa difficulté.


Si quelqu' un a une idée, je suis preneur :/


Merci d' avance:!

Petit nouveau ! | 1 Messages

23 janv. 2010, 01:39

Dans un premier temps, tu fais une requête qui te liste chaque catégorie en utilisant "group by" afin de ne pas lister deux fois la même categorie
puis pour chaque categorie obtenue, tu fait une requète recherchant le dernier id entré dans cette catégorie et en afficher qu'un seul
exemple
$requete = mysql_query("SELECT cat from articles group by cat");
while($resultat=mysql_fetch_array($requete))
{$categorie=$resultat['cat'];
$requete2 = mysql_query("SELECT id, cat, sous-cat from articles where cat=' " .$categorie. " ' order by id DESC limit 1");
 while($resultat2=mysql_fetch_array($requete2))
{
//ici le code du tableau et l'affichage du résultat
}

}
j'espère que c'est ce que tu voulais

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 janv. 2010, 11:03

Juste une petit précision : pour ne pas lister deux fois des données identiques, il faut utiliser l'instruction DISTINCT. Le GROUP BY permet, comme son nom l'indique, de regrouper des données (lorsque l'on utilise une fonction de groupe : SUM, MAX, COUNT etc.).
$requete = mysql_query("SELECT DISTINCT cat FROM articles");
En revanche je ne comprend pas ce que tu veux obtenir... le dernier article de chaque catégorie ? de chaque sous-catégorie ? de chaque catégorie ET sous-catégorie ?

En effet, si tu veux par exemple le dernier article de chaque catégorie, alors tu peux utiliser group by et faire cela en une seule requête :
$requete = mysql_query("SELECT MAX(id), cat FROM articles GROUP BY cat");
Ceci te retournera l'id le plus haut (donc en théorie le plus récent) pour chacune des catégories
$requete = mysql_query("SELECT MAX(id), cat, sous-cat  FROM articles GROUP BY cat, sous-cat ");
Te retournera l'id le plus haut pour chacune des sous-catégories, de chacune des catégories
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...