Mon problème est le suivant. J'ai une table de catégories reliée à une table de rubriques. J'ai donc pour chaque ligne de la table catégorie une clé étrangère faisant référence à une ligne de la table rubrique. Là où ça se corse un brin, c'est que certaines catégories comportent des sous-catégories.
J'ai bien une série de fonctions PHP pour faire une recherche récursive et me classer tout ça en échelonnant en fonction du niveau de profondeur : ça fonctionne très bien, mais ça ne me satisfait pas du tout pour une raison fort simple: j'ai par exemple 16 lignes dans ma table catégorie et ça me génère donc 16 requêtes. Je dois pouvoir ramener ça à une seule requête. Le but étant de mettre le résultat dans un tableau sur lequel je ferai ensuite les opérations nécessaire pour un affichage selon la nécessité de la page.
Voilà actuellement une base sommaire:
Code : Tout sélectionner
mysql> SELECT rub_id, cat_id, cat_id_parent, cat_libelle
-> FROM categorie;
+--------+--------+---------------+-----------------------------+
| rub_id | cat_id | cat_id_parent | cat_libelle |
+--------+--------+---------------+-----------------------------+
| 4 | 1 | 0 | Véhicules Peugeot |
| 4 | 2 | 0 | Véhicules Renault |
| 4 | 3 | 1 | Berlines |
| 4 | 4 | 1 | Les coupés |
| 4 | 5 | 1 | Les utilitaires |
| 4 | 6 | 5 | Les fourgons fermés Peugeot |
| 1 | 7 | 0 | Les Appartements |
| 1 | 8 | 0 | Maisons |
| 1 | 9 | 8 | Maisons de campagne |
| 1 | 10 | 8 | Les maisons urbaines |
| 1 | 11 | 0 | Les vacances |
| 4 | 12 | 1 | Les deux roues |
| 3 | 13 | 0 | La cuisine |
| 3 | 14 | 0 | Le salon |
| 3 | 15 | 0 | Les chambres |
| 3 | 16 | 0 | La salle à manger |
+--------+--------+---------------+-----------------------------+Code : Tout sélectionner
mysql> SELECT rub_id, cat_id, cat_id_parent, cat_libelle
-> FROM categorie
-> ORDER BY rub_id, cat_id_parent, cat_id;
+--------+--------+---------------+-----------------------------+
| rub_id | cat_id | cat_id_parent | cat_libelle |
+--------+--------+---------------+-----------------------------+
| 1 | 7 | 0 | Les Appartements |
| 1 | 8 | 0 | Maisons |
| 1 | 11 | 0 | Les vacances |
| 1 | 9 | 8 | Maisons de campagne |
| 1 | 10 | 8 | Les maisons urbaines |
| 3 | 13 | 0 | La cuisine |
| 3 | 14 | 0 | Le salon |
| 3 | 15 | 0 | Les chambres |
| 3 | 16 | 0 | La salle à manger |
| 4 | 1 | 0 | Véhicules Peugeot |
| 4 | 2 | 0 | Véhicules Renault |
| 4 | 3 | 1 | Berlines |
| 4 | 4 | 1 | Les coupés |
| 4 | 5 | 1 | Les utilitaires |
| 4 | 12 | 1 | Les deux roues |
| 4 | 6 | 5 | Les fourgons fermés Peugeot |
+--------+--------+---------------+-----------------------------+Code : Tout sélectionner
+--------+--------+---------------+-----------------------------+
| rub_id | cat_id | cat_id_parent | cat_libelle |
+--------+--------+---------------+-----------------------------+
| 1 | 7 | 0 | Les Appartements |
| 1 | 8 | 0 | Maisons |
| 1 | 9 | 8 | Maisons de campagne |
| 1 | 10 | 8 | Les maisons urbaines |
| 1 | 11 | 0 | Les vacances |
| 3 | 13 | 0 | La cuisine |
| 3 | 14 | 0 | Le salon |
| 3 | 15 | 0 | Les chambres |
| 3 | 16 | 0 | La salle à manger |
| 4 | 1 | 0 | Véhicules Peugeot |
| 4 | 3 | 1 | Berlines |
| 4 | 4 | 1 | Les coupés |
| 4 | 5 | 1 | Les utilitaires |
| 4 | 6 | 5 | Les fourgons fermés Peugeot |
| 4 | 12 | 1 | Les deux roues |
| 4 | 2 | 0 | Véhicules Renault |
+--------+--------+---------------+-----------------------------+- Logement -
Les Appartements
Maisons
->Maisons de campagne
->Les maisons urbaines
Les vacances
- Mobilier -
La cuisine
Le salon
Les chambres
La salle à manger
- Véhicules -
Véhicules Peugeot
->Berlines
->Les coupés
->Les utilitaires
->->Les fourgons fermés Peugeot
->Les deux roues
Véhicules Renault