Afficher les produits des sous catégories

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

bovitch
WRInaute discret
WRInaute discret
 
Messages: 61
Inscription: Ven Juin 11, 2004 14:22

Afficher les produits des sous catégories

Message le Jeu Fév 07, 2008 19:23

Bonjour,

j'ai des catégories qui ne contiennent que des sous-categories (pas de produits).
Lorquon est dans une catégorie mère, je souhaiterais afficher 10 produits aléatoirs issus des sous catégories.

C'est un casse tête pour moi, pouvez vous me guider ?

J'ai une table produits (avec id_produit) une table produit (avec id_cat, id_parent) et une table categorie_produits (avec id_produit, id_cat)

merce d'avance.

bixi
WRInaute discret
WRInaute discret
 
Messages: 70
Inscription: Mer Sep 19, 2007 8:48

Message le Jeu Fév 07, 2008 20:41

salut ..

Ca sent la requete récursive .. et la t'es pas couché surtout si il faut que je t'en explique le principe

en gros l'idée de la requete c'est ca :

SELECT p.*
FROM produits P
LEFT JOIN categories_produits CP ON P.id_produit = CP.id_produit
LEFT JOIN categories C ON C.id_categorie = CP.id_categorie
WHERE C.id_parent = 5
ORDER BY RAND()
LIMIT 10

La tu aura 10 produits aléatoires parmi les catégories directement en dessôus de ta catégorie mère..

Si tu veux aler en profondeur dans les sous-catégories, ca va etre plus chaud et j'ai meme pas le courage de t'expliquer... tapes récursivité dans google :p

bovitch
WRInaute discret
WRInaute discret
 
Messages: 61
Inscription: Ven Juin 11, 2004 14:22

Message le Jeu Fév 07, 2008 22:37

bixi a écrit:Si tu veux aler en profondeur dans les sous-catégories...

t'as tout compris, en effet ce qui m'interesse c de decendre en profondeur. :-)

merci de ton aide.

DadouDuck
WRInaute passionné
WRInaute passionné
 
Messages: 811
Inscription: Lun Mai 28, 2007 22:41

Message le Ven Fév 08, 2008 10:52

J'ai une solution propre, mais qui necessite que tu modifie un peut la structure de ta base : il faut utiliser la "Représentation intervallaire des arborescense "comme expliqué ici au chapitre 2 : http://sql.developpez.com/arborescence/ cela permet de garder des bonnes perfs au niveau du traitement de la base de données

bovitch
WRInaute discret
WRInaute discret
 
Messages: 61
Inscription: Ven Juin 11, 2004 14:22

Message le Ven Fév 08, 2008 11:46

ok merci de ton aide DadouDuck je vais voir si ça vaut le coup que je pete toute ma base pour faire ça.


cedric_g
WRInaute accro
WRInaute accro
 
Messages: 2035
Inscription: Mer Jan 18, 2006 16:26

Message le Ven Fév 08, 2008 11:56

Bonjour


Sauf à avoir un nombre énorme de catégories et sous-catégories, en matière de performance il "suffit" de mettre en place un cache.

J'utilise ce système dans une vieille galerie photo avec catégories imbriquées (arborescence) que je suis d'ailleurs sur le point de refaire de A à Z (c'était l'un de mes premiers sites PHP :D ) et ça marche très bien, sans gros impact au niveau du serveur MySQL.

Si tes catégories ne changent pas toutes les 10mn il suffit de régler le cache sur par ex. 7 jours, et les produits affichés au hasard toutes les minutes (tout dépend de ton trafic, évidemment), et de vider partiellement le cache à chaque ajout/suppression de produit ou catégorie, qui sera reconstruit automatiquement dès la première consultation.

Ainsi les accès BDD seront fortement minimisés et les perfs s'en suivront. Mais bon je parle certainement en l'air car je ne conçois pas un site web faisant des appels BDD sans cache :roll:

DadouDuck
WRInaute passionné
WRInaute passionné
 
Messages: 811
Inscription: Lun Mai 28, 2007 22:41

Message le Ven Fév 08, 2008 12:19

Et le cache justifie de coder une base comme un porc???

Et si après il veut gérer le fait qu'il ne faille que présenter que les produits dispo, entre 2 demandes clients cela peut changer (le client juste avant a déjà pris le dernier article)

Et tu ne semble penser qu'a un usage web de la bdd, mais si plus tard, il decide de faire une appli client lourd pour attaquer sa base, les optimisation de base et de requetes sont très importantes, il faudra alors qu'il revoie toute sa base, si il la conçoit proprement dès le départ, c'est toujours ça de gagné pour plus tard.

Il ne faut jamais negliger les optimisations de bases de données, j'ai eu l'expérience dernièrement d'un client avec une base non optimisée, et dont les traitements étaient d'une lenteur, l'usage d'un cache n'aurait pas plus aider (2mn de traitement de la requete) après optimisation, c'était quasi instantanné


cedric_g
WRInaute accro
WRInaute accro
 
Messages: 2035
Inscription: Mer Jan 18, 2006 16:26

Message le Ven Fév 08, 2008 15:28

Je n'ai jamais écrit ou dit cela. Je gère des bases de données toute la journée (je suis spécialisé en analyse décisionnelle en technos Microsoft...) donc je sais ce qu'est une base optimisée, étant accessoirement architecte du système d'information de mon entreprise (centre de gestion agréé, 180 salariés, 3000 clients...)

Je m'inscrivais dans une optique "web", voilà tout :wink:

Maintenant, de là à dire qu'il faut coder comme un porc, je ne crois pas. C'est juste une solution pour optimiser les performances côté client et limiter les accès inutiles au serveur :roll:

DadouDuck
WRInaute passionné
WRInaute passionné
 
Messages: 811
Inscription: Lun Mai 28, 2007 22:41

Message le Ven Fév 08, 2008 15:58

Même dans une optique web, la gestion du cache n'est pas toujours pertinente, si dans sa requête il doit tenir compte de la gestion des stocks, il ne peut plus utiliser la technique de cache, c'est dans ce genre d'optique qu'il faut penser. C'est vrai que la sur le coup, cela va optimiser, mais plus tard?


cedric_g
WRInaute accro
WRInaute accro
 
Messages: 2035
Inscription: Mer Jan 18, 2006 16:26

Message le Ven Fév 08, 2008 16:09

Ah ben tout dépend ce qu'il doit afficher, et où.

Après c'est de la mamaille de gestionnaire (obsolescence des produits, réappros, etc.) ; d'ailleurs le cache peut ne concerner que certaines parties de pages, et en jouant sur les CSS on peut utiliser un même cache pour plusieurs types d'affichages :wink:

bixi
WRInaute discret
WRInaute discret
 
Messages: 70
Inscription: Mer Sep 19, 2007 8:48

Message le Ven Fév 08, 2008 17:34

cache ou non-cache, perf ou non-perf la quiestion etait de toute facon ailleurs :p : soitt il fait du recursif pour tenir compte de la profondeur des categories et rappatrier 10 articles parmi toutes les categories enfants..

soit il modifie sa BDD pour connaitre a tout moment TOUTES les categories ancetres de chaques catégorie (ce qui ne serait pas bete.. niveau perf: p)


smiles
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 100
Inscription: Sam Jan 17, 2004 11:04

Message le Ven Fév 08, 2008 21:03

Fonction recursive, si pas des milliers de catégories, en quelques lignes c'est ok

Code: Tout sélectionner
function rand_cat($id)
     {                     
        $sql="SELECT id FROM categorie WHERE parent_cat='$id' order by rand()";
        $rt=mysql_query($sql);                     
        while ($data= mysql_fetch_array($rt))
          { 
            $sql1="SELECT * FROM produit where cat='$data[id]' order by rand() limit 0,1";  // 1 produit par sous cat
            $rt1=mysql_query($sql1);                         
            $dataprod= mysql_fetch_array($rt1);
            rand_cat($data['id']); // recursivite 
        }                       
     }
//depart mentionne parent_cat
rand_cat($depart);


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités