Afficher les produits des sous catégories

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par bovitch, 7 Février 2008.

  1. bovitch
    bovitch WRInaute discret
    Inscrit:
    11 Juin 2004
    Messages:
    67
    J'aime reçus:
    0
    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.
     
  2. bixi
    bixi WRInaute discret
    Inscrit:
    19 Septembre 2007
    Messages:
    70
    J'aime reçus:
    0
    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
     
  3. bovitch
    bovitch WRInaute discret
    Inscrit:
    11 Juin 2004
    Messages:
    67
    J'aime reçus:
    0
    t'as tout compris, en effet ce qui m'interesse c de decendre en profondeur. :)

    merci de ton aide.
     
  4. DadouDuck
    DadouDuck WRInaute impliqué
    Inscrit:
    28 Mai 2007
    Messages:
    812
    J'aime reçus:
    0
    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
     
  5. bovitch
    bovitch WRInaute discret
    Inscrit:
    11 Juin 2004
    Messages:
    67
    J'aime reçus:
    0
    ok merci de ton aide DadouDuck je vais voir si ça vaut le coup que je pete toute ma base pour faire ça.
     
  6. cedric_g
    cedric_g WRInaute accro
    Inscrit:
    18 Janvier 2006
    Messages:
    2 930
    J'aime reçus:
    2
    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:
     
  7. DadouDuck
    DadouDuck WRInaute impliqué
    Inscrit:
    28 Mai 2007
    Messages:
    812
    J'aime reçus:
    0
    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é
     
  8. cedric_g
    cedric_g WRInaute accro
    Inscrit:
    18 Janvier 2006
    Messages:
    2 930
    J'aime reçus:
    2
    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:
     
  9. DadouDuck
    DadouDuck WRInaute impliqué
    Inscrit:
    28 Mai 2007
    Messages:
    812
    J'aime reçus:
    0
    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?
     
  10. cedric_g
    cedric_g WRInaute accro
    Inscrit:
    18 Janvier 2006
    Messages:
    2 930
    J'aime reçus:
    2
    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:
     
  11. bixi
    bixi WRInaute discret
    Inscrit:
    19 Septembre 2007
    Messages:
    70
    J'aime reçus:
    0
    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)
     
  12. smiles
    smiles WRInaute discret
    Inscrit:
    17 Janvier 2004
    Messages:
    52
    J'aime reçus:
    0
    Fonction recursive, si pas des milliers de catégories, en quelques lignes c'est ok

    Code:
    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);
    
     
Chargement...
Similar Threads - Afficher produits catégories Forum Date
Afficher les produits suivants en ajax Développement d'un site Web ou d'une appli mobile 12 Mai 2020
Ecommerce : afficher 10 ou 50 produits par page ? e-commerce 29 Janvier 2014
Afficher des infos depuis plusieurs page en PHP Développement d'un site Web ou d'une appli mobile 23 Mars 2022
Afficher la dernière version d'un fichier php ? Développement d'un site Web ou d'une appli mobile 8 Novembre 2021
comment afficher l erreur 404 URL Rewriting et .htaccess 28 Juillet 2021
Devra-t-on afficher les émissions de gaz à effet de serre de nos sites? Droit du web (juridique, fiscalité...) 28 Mars 2021
Afficher module avis Google sur un site web via le GTM ? Google : l'entreprise, les sites web, les services 18 Mars 2021
Afficher stats analytics sur mon site Google Analytics 14 Novembre 2020
Ne pas afficher certaines conversions dans Google Ads AdWords 8 Juillet 2020
Google a-t-il le droit d'afficher directement les informations des sites sans leur accord ? Droit du web (juridique, fiscalité...) 21 Février 2020
API pour afficher les avis Google sur son site Google : l'entreprise, les sites web, les services 10 Novembre 2019
Afficher les tags sur wordpress Développement d'un site Web ou d'une appli mobile 3 Août 2019
Extension Chrome utile pour afficher le code source HTML, JS, CSS Développement d'un site Web ou d'une appli mobile 5 Juillet 2019
Google My Business :Comment afficher sa zone de couverture et pas son adresse ? Google : l'entreprise, les sites web, les services 19 Juin 2019
Afficher/cacher données dans un tableau Développement d'un site Web ou d'une appli mobile 9 Mars 2019
Afficher des valeurs d'une colonne à l'autre selon condition Développement d'un site Web ou d'une appli mobile 11 Février 2019
Google Chrome va afficher à nouveau les sous-domaines Google : l'entreprise, les sites web, les services 18 Septembre 2018
Google PageSpeed Insight : Afficher en priorité le contenu visible Développement d'un site Web ou d'une appli mobile 16 Août 2018
Afficher valeur id onclick sur checkbox Développement d'un site Web ou d'une appli mobile 21 Février 2018
Est-il important d'afficher ses pages en AMP pour être favorisé par Index Mobile First ? Référencement Google 19 Décembre 2017