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 :

Lister catégories et leur contenu


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 19
    Par défaut Lister catégories et leur contenu
    Bonjour,
    Je possède 2 tables dans ma base :
    Category
    - cat_id
    - cat_label

    Function
    - fct_id
    - cat_id
    - fct_label

    Comme vous le voyez, une fonction appartient à une catégorie et une catégorie possède plusieurs fonction.
    J'aimerais afficher un listing des fonctions par catégorie de façon a obtenir un affichage comme suit :

    Catégorie 1 :
    * fonction 1
    Catégorie 2 :
    * fonction 2
    * fonction 3

    Sans afficher les catégories vides.
    Pouvez-vous m'aider à écrire le script en php, et les requêtes SQL qui vont avec s'il vous plait. J'utilise PHP5 et MySQL5 avec des tables MyISAM.

    Merci

  2. #2
    Membre expérimenté Avatar de Gaara-Manga
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Avril 2007
    Messages : 247
    Par défaut
    Bon ya 50000 façon de faire en voici une :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
    $result = mysql_query("SELECT cat_id, cat_label FROM Category");
    while($row = mysql_fetch_array($result))
    {
    echo $row['cat_label'].'<br />';
     
    $result2 = mysql_query("SELECT fct_label FROM Function WHERE cat_id='".$row['cat_id']."'");
    while($raw = mysql_fetch_array($result2))
    {
    echo '* '.$raw['fct_label'].'<br />';
    }
    }
    ?>

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 72
    Par défaut
    Le plus simple est de faire une jointure MySQL :

    SELECT c.cat_id, c.cat_label, f.fct_id, f.fct_label FROM Category c LEFT JOIN Function f USING(cat_id)

    Ensuite en php tu teste si le l'id_cat change et à ce moment là tu affiche le label de la catégorie.

    Bien à toi

  4. #4
    Membre très actif Avatar de ghost emperor
    Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2007
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Septembre 2007
    Messages : 170
    Par défaut
    et avec un group by cat_id dans la requète ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 72
    Par défaut
    Bof, il ne disposerait plus des labels et id des fonctions.

    L'avantage ici, c'est qu'on n'a qu'une seule requête.

  6. #6
    Membre très actif Avatar de ghost emperor
    Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2007
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Septembre 2007
    Messages : 170
    Par défaut
    même en gardant la jointure ?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 72
    Par défaut
    Oui, oui,

    Par exemple pour une table fonctions composée de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    fct_id           fct_label       cat_id
     
    1                 fnc_1           1
    2                 fnc_2           1
    3                 fnc_3           1
    4                 fnc_4           1
    5                 fnc_5           2
    6                 fnc_6           2
    7                 fnc_7           2
    8                 fnc_8           3
    9                 fnc_9           3
    et une table categories comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    cat_id           cat_label
     
    1                  Catégorie_1
    2                  Catégorie_2
    3                  Catégorie_3
    On aurait comme résultat pour ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    c.cat_id             c.cat_label            f.fct_id               f.fct_label
     
    1                      Catégorie_1           1                       fnc_1
    1                      Catégorie_1           2                       fnc_2
    1                      Catégorie_1           3                       fnc_3
    1                      Catégorie_1           4                       fnc_4
    2                      Catégorie_2           5                       fnc_5
    2                      Catégorie_2           6                       fnc_6
    2                      Catégorie_2           7                       fnc_7
    3                      Catégorie_3           8                       fnc_8
    3                      Catégorie_3           9                       fnc_9
    Et si on ajoute un group by cat_id:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    c.cat_id             c.cat_label            f.fct_id               f.fct_label
     
    1                      Catégorie_1           1                       fnc_1
    2                      Catégorie_2           5                       fnc_5
    3                      Catégorie_3           8                       fnc_8
    Ce qui nous obligerait à faire une seconde requête pour les labels des fnc...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment dimensionner JFrame ou JPanel en fonction de leur contenu
    Par L4BiN dans le forum Agents de placement/Fenêtres
    Réponses: 7
    Dernier message: 15/02/2007, 14h49
  2. [VBA-E] comment vider les noms de leur contenu?
    Par MAGUIN dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/01/2007, 14h22
  3. Réponses: 4
    Dernier message: 03/09/2006, 19h12
  4. Quelle requête liera deux tables en analysant leur contenu ?
    Par Monbasinstinct dans le forum Access
    Réponses: 14
    Dernier message: 13/04/2006, 18h03
  5. [JURIDIQUE] les bases de données et leurs contenu
    Par Rayek dans le forum Décisions SGBD
    Réponses: 10
    Dernier message: 20/12/2005, 17h52

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