Créer de catégories et des sous-sous-catégories

Eléphant du PHP | 331 Messages

03 mars 2008, 22:25

Bonjour,

Depuis longtemps je créer des catégories et des sous-catégorie en utilisant une table categorie et une table sous-categorie.

Alors, quand je veux créer une sous-categorie j,ai une liste déroulante qui affiche les catégories disponible.

Je fait envoyer et dans ma table sous_categorie J,ai un numéro de sous_categorie (clef primaire autoincrémenté) , un nom et un champ categorie_id.

Maintenant, je veux pouvoir avoir des sous-sous-categorie en utilisant seulement une table.

je crois avoir la bonne structure de table mais je ne comprend pas comment l'alimenter et la lire.

Genre que dans ma page de création de catégorie j'aurai seulement une liste déroulante où j'y verrai toutes les categoies, sous-categories et sous-sous-categorie.

Exemple:
<select name="categories">
<option value="1">Fruit</option>
<option value="2">Fruit -> Sud-americain</option>
<option value="3">Fruit -> Sud-americain -> Orange</option>
<option value="4">Fruit -> Sud-americain -> Pamplemousse</option>
<option value="5">Fruit -> Nord-americain</option>
<option value="6">Fruit -> Nord-americain -> Pomme</option>
<option value="7">Fruit -> Nord-americain -> Bleuet sauvage</option>
<option value="8">Fruit -> Nord-americain -> Citrouille</option>
</select>
Voici ma table:

-- Version du serveur: 5.0.27
-- Version de PHP: 5.1.6

Code : Tout sélectionner

CREATE TABLE categories ( id_cat int(255) NOT NULL auto_increment, nom varchar(255) NOT NULL, id_parent int(255) NOT NULL, id_sous_parent int(255) NOT NULL, ord_affiche int(255) NOT NULL, PRIMARY KEY (id_cat) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Pouvez-vous m'aider soit en guidant dans le codage ou en me référant un bon turiel là-dessus.

Merci!

ViPHP
ViPHP | 928 Messages

03 mars 2008, 22:33

Bonsoir,
un bon tutoriel présentant une modélisation pour les gestion de sous catégories et d'enfants comme tu souhaites le faire : http://sqlpro.developpez.com/cours/arborescence/

Eléphant du PHP | 331 Messages

03 mars 2008, 23:25

C'est en théorie exactement se que je cherches.

Mais je n,arrive pas a mettre ça en pratique.

Toutes les requête de se tutoriel contiennent les numéros des enregistrement pour les clauses where.

Mais dans la pratique ont ne connait pas les numéros d'enregistrement la requête doit être plus automatique ou autonome.

Que peux-tu me dire là-dessus?

Merci!

Eléphant du PHP | 331 Messages

06 mars 2008, 06:11

J'ai trouvé un bout de code qui fait se que je cherches a faire mais en une liste d'item <ul><li></li></ul>

Voici la bd:

Code : Tout sélectionner

CREATE TABLE `arbo1` ( `id` int(10) unsigned NOT NULL auto_increment, `nom` varchar(100) default NULL, `id_parent` int(10) unsigned default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
Voici le code original avec mes petites modifications:
 function affArbo1($id=0)
 {
	$r=mysql_query('SELECT id, nom FROM arbo1 WHERE id_parent='.$id) or die(mysql_error());
 	while($data=mysql_fetch_assoc($r))
	{
 	echo "<option>".$data['nom']."</option>\n";
 	affArbo1($data['id']);
	}
 }
 echo "<select>\n"; 
 affArbo1(); 
 echo "</select>\n";
Voici le résultat que sa me donne:

Code : Tout sélectionner

<select> <option>Fruit</option> <option>Sud-americain</option> <option>Orange</option> <option>Pamplemousse</option> <option>Nord-americain</option> <option>Pomme</option> <option>Bleuet sauvage</option> </select>
Voici le résultat que j'aimerais avoir:

Code : Tout sélectionner

<select> <option>Fruit</option> <option>Fruit -> Sud-americain</option> <option>Fruit -> Sud-americain -> Orange</option> <option>Fruit -> Sud-americain -> Pamplemousse</option> <option>Fruit -> Nord-americain</option> <option>Fruit -> Nord-americain -> Pomme</option> <option>Fruit -> Nord-americain -> Bleuet sauvage</option> </select>
Pouvez-vous m'aider svp?

Merci!!

RJ45
Invité n'ayant pas de compte PHPfrance

31 déc. 2014, 13:38

Ce n'est pourtant pas fort compliqué avec la méthode intervallaire.

Bon, j'avoue que j'ai cherché pas mal, mais si l'on imbrique des boucles dans des boucles avec des requêtes sql chaque fois, on balaye toute la DB dans la bon ordre.
L'avantage de la représentation intervallaire, c'est que si l'on ajoute des éléments par la suite, cela n'aura pas d'influence sur l'affichage par la suite.
Bon, j'admet que l'on exploite pas toute la puissance du système comme indiqué sur developpez.com, mais le résultat est là.