IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Catégorie et sous-catégories


Sujet :

PHP & Base de données

  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Par défaut Catégorie et sous-catégories
    Bonjour à tous, j'ai un ti souci je doit concevoir un catalog en ligne et j'ai besoin d'avoir des sous categorie.
    ma base de donnée au départ gérais les categories simple mais je viens d'ajouter des sous -categories afin de permettre au client d'agrandir son arborecence.
    Voici ma base de donnée :
    • id
    • catcatalog
    • subcatcatlog
    • img_catalog
    • title_catalog
    • desciption_catalog
    • prix
    • metastitle
    • metasdescription

    je doit par exemple selectionner une fichier ayant une categorie "test" une sous categorie "montest".
    pour sa pas de prob seulement je doit construire le menu dynamique qui par exemple serai comme ceci:
    • test
      • montest
      • montest2

    • test2
      • boire
      • manger

    en selectionnant j'ai peur d'avoir un doublon de la categorie j'ai alors fais une table contenant juste la categorie et une autre contenant la sous categorie pour mes insertions.
    mais le probléme c pour afficher un menu comme indiqué plus haut.
    c un prob de requete et de mise en pratique

  2. #2
    Membre chevronné Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Par défaut
    Bonjour!

    Voyons déjà la requête donc!

    alors imaginons que tu as une table catégorie, et une table sous catégorie.
    je devine (et j'espère) que dans la table sous catégorie tu as un champ permettant de lier une sous catégorie à une catégorie

    je vois ta table catégorie comme çà :

    catégorie
    cat_id
    cat_libelle

    et la table sous catégorie comme çà :

    sous_catégorie
    sous_cat_id
    sous_cat_libelle
    cat_id

    il faudrait idéalement faire une requête permettant d'ordonner toute les sous catégories selon chaque catégorie !

    je te propose cette requète :


    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT * 
    FROM
    	(	SELECT cat_id as id , cat_libelle as libelle, 0 as cat_type, cat_id as identifiant 
    		FROM categorie
    		UNION 
    		SELECT cat_id as id, sous_cat_libelle as libelle, 1 as cat_type, sous_cat_id as identifiant
    		FROM sous_categorie
    	) as matable
    ORDER BY id, cat_type

    on va créer une table virtuelle qui va regrouper les catégorie et les sous catégorie en leur donnant des noms de colonnes identiques. ils seront mélangés mais ce n'est pas grave.

    on va les ordonner dans un premier temps par "id", du coup on aura les catégorie regroupé avec leur sous catégorie.

    Pour préciser l'ordre, on va leur donner un statut "cat_type", 0 pour catégorie, 1 pour sous_catégorie. On ordonne aussi par ce "cat_type", du coup on aura les 0 d'abord, puis les 1 ensuites

    ca va donner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    id	| libelle		| cat_type	| identifiant
    1  	| chaussures 		| 0 		| 1
    1 	| montantes 		| 1 		| 12
    1 	| à talons 		| 1 		| 42
    2 	| t shirt 		| 0 		| 2
    2 	| col en V 		| 1 		| 33
    2 	| manche courtes	| 1 		| 90

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Par défaut
    merci beaucoup sa a l'air exactement ce que je cherche, mais ma table principal doit être modifier pour correspondre avec votre exemple comment procéder pour que ce soit optimal.
    Et par exemple si on clique sur la categorie test de la sous categorie montest je doit faire apparaitre tous les liens de celle-ci:
    genre une liste des elements contenu dans la sous categorie cliquez.
    Ce qui en reviens de lier mes trois tables ??
    je sais je pose bcp de question mais je doit procéder de la même façon pour mon catalogue, mon cms et peut être autre chose.
    Une fois bien assimilé je pourrai aller encore plus loin
    categorie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE `db_plugins_catalog_subcat` (
      `sub_cat_id` int(3) NOT NULL,
      `sub_cat_libelle` varchar(155) NOT NULL,
      `cat_id` int(3) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    sous categorie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE `db_plugins_catalog_cat` (
      `cat_id` int(3) NOT NULL,
      `cat_libelle` varchar(155) NOT NULL,
      PRIMARY KEY  (`cat_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
    table principal a modifier pour correspondre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE TABLE `db_plugins_catalog` (
      `id` int(3) NOT NULL auto_increment,
      `cat_libelle` varchar(155) NOT NULL,
      `sub_cat_libelle` varchar(155) NOT NULL,
      `urlcatalog` varchar(155) NOT NULL,
      `img_catalog` varchar(155) NOT NULL,
      `title_catalog` varchar(155) NOT NULL,
      `description_catalog` text NOT NULL,
      `prix` decimal(12,4) NOT NULL default '0.0000',
      `metastitle` varchar(155) NOT NULL,
      `metasdescription` varchar(255) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;
    Et si par exemple je désire selectionner certaine categorie specifique avec leur sous categorie.
    par exemple j'ai une div qui contient tous ce qui a rapport avec du linge :
    Mon linge
    • sec
      • couleur
      • blanc

    Dsions que je ne veux afficher que cela donc spécifier les categories à afficher comment serai construite votre requete ??
    je suppose avec un where ....

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Par défaut
    J'ai voulu avoir une colonne virtuelle supplémentaire pour avoir la sous categorie comprise dans l'url si elle existe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT *
    FROM (
     
    SELECT cat_id AS id, cat_libelle AS libelle, 0 AS cat_type, cat_id AS identifiant
    FROM db_plugins_catalog_cat
    UNION
    SELECT cat_id AS id, sub_cat_libelle AS sublibelle, 1 AS cat_type, sub_cat_id AS identifiant
    FROM db_plugins_catalog_subcat
    ) AS matable
    ORDER BY id, cat_type
    Seulement cela ne fonctionne pas, je doit afficher le menu comme indiquer plus haut et je n'y arrive pas
    ici il indique forcement le libelle dans l'url mais si c une sous categorie on doit avoir :
    test/masous
    et non
    masous
    J'utilise smarty et franchement c'est une catastrophe pour l'instant avec les sous categorie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    {foreach from=$loadMenu key=attr item=i}
    	<ul>
    		<li><a href="{$i.libelle|replace:' ':'-'}">{$i.libelle}</a></li>
    	</ul>
    	{/foreach}
    Voila la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function loadSitemapCatalog(){
    		global $connStr,$user,$pass;
    			$dbh = new PDO($connStr, $user, $pass);
    			$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    			$stmt = $dbh->prepare("SELECT * FROM (SELECT cat_id AS id, cat_libelle AS libelle, 0 AS cat_type, cat_id AS identifiant FROM db_plugins_catalog_cat UNION SELECT cat_id AS id, sub_cat_libelle AS libelle, 1 AS cat_type, sub_cat_id AS identifiant FROM db_plugins_catalog_subcat) AS matable ORDER BY id, cat_type");
    			$stmt->setFetchMode(PDO::FETCH_ASSOC);
    			$stmt->execute();
    			$result = $stmt->fetchAll();
    			$stmt->closeCursor();
    			$stmt = null;
    		return $result;
    	}
    Une idée ???? je bloque net

Discussions similaires

  1. SELECT: gestion de catégories et sous-catégories
    Par cissou06 dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 05/02/2008, 17h29
  2. [UML][UC] Comment représenter catégories et sous catégories
    Par Kakashi_sensei dans le forum Cas d'utilisation
    Réponses: 15
    Dernier message: 31/01/2008, 17h56
  3. [MySQL] Affichage des catégories et sous catégories
    Par onirisme dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/10/2007, 10h24
  4. Réponses: 17
    Dernier message: 07/09/2007, 08h06
  5. Affichage incrémenté de catégories et sous-catégories
    Par Djakisback dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 21/09/2006, 21h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo