MySQL Forums
Forum List  »  French

Re: Categories avec Parent HowTo
Posted by: Jean Molliné
Date: September 10, 2007 02:07PM

Ok, je vois ce que tu veux faire. Mais en une seule requête, c'est assez mal barré. Je me suis livré a de petits tests et ma conclusion (D'autres auront peut-être des suggestions meilleures) est qu'il manque une colonne dans ta table. Cette colonne pose un petit problème au départ : il faut connaitre l'identifiant (clé primaire) de la ligne parente racine. Sur la base du petit jeu d'essai, pour la première, ce sera 1, pour la seconde, 2, pour la troisième 1, pour la quatrième 2 et pour la cinquième 1.
Avec un jeu d'essai un peu grossi, ça donnerait quelque chose comme ceci :
mysql> CREATE TABLE `categorie` (
    -> `cid` INTEGER UNSIGNED auto_increment PRIMARY KEY,
    -> `rcid` INTEGER UNSIGNED NOT NULL default '1',
    -> `pcid` INTEGER UNSIGNED NOT NULL default '0',
    -> `name` varchar (32) NOT NULL default ''
    -> );
Query OK, 0 rows affected (0.05 sec)

mysql>
mysql> INSERT INTO `categorie` (`cid`, `rcid`, `pcid`, `name`) VALUES
    -> (1,  1,  0, 'test1'),
    -> (2,  1,  1, 'test2'),
    -> (3,  1,  2, 'test3'),
    -> (4,  4,  0, 'test4'),
    -> (5,  5,  0, 'test5'),
    -> (6,  6,  0, 'test6'),
    -> (7,  4,  4, 'test7'),
    -> (8,  5,  5, 'test8'),
    -> (9,  4,  7, 'test9'),
    -> (10, 6,  6, 'test10'),
    -> (11, 5,  8, 'test11'),
    -> (12, 5,  11, 'test12'),
    -> (13, 6,  10, 'test13'),
    -> (14, 14, 0, 'test14');
Query OK, 14 rows affected (0.02 sec)
Records: 14  Duplicates: 0  Warnings: 0

mysql>
mysql> SELECT * FROM categorie;
+-----+------+------+--------+
| cid | rcid | pcid | name   |
+-----+------+------+--------+
|   1 |    1 |    0 | test1  |
|   2 |    1 |    1 | test2  |
|   3 |    1 |    2 | test3  |
|   4 |    4 |    0 | test4  |
|   5 |    5 |    0 | test5  |
|   6 |    6 |    0 | test6  |
|   7 |    4 |    4 | test7  |
|   8 |    5 |    5 | test8  |
|   9 |    4 |    7 | test9  |
|  10 |    6 |    6 | test10 |
|  11 |    5 |    8 | test11 |
|  12 |    5 |   11 | test12 |
|  13 |    6 |   10 | test13 |
|  14 |   14 |    0 | test14 |
+-----+------+------+--------+
14 rows in set (0.00 sec)

mysql>
mysql> SELECT c1.cid, c1.pcid, c1.name
    -> FROM categorie c1
    -> ORDER BY c1.rcid, c1.cid, c1.pcid;
+-----+------+--------+
| cid | pcid | name   |
+-----+------+--------+
|   1 |    0 | test1  |
|   2 |    1 | test2  |
|   3 |    2 | test3  |
|   4 |    0 | test4  |
|   7 |    4 | test7  |
|   9 |    7 | test9  |
|   5 |    0 | test5  |
|   8 |    5 | test8  |
|  11 |    8 | test11 |
|  12 |   11 | test12 |
|   6 |    0 | test6  |
|  10 |    6 | test10 |
|  13 |   10 | test13 |
|  14 |    0 | test14 |
+-----+------+--------+
14 rows in set (0.00 sec)
Si tu regardes la requête de création, j'ai bien "cid" pour la clé primaire, pcid pour la clé parente, mais en plus rcid pour la clé racine qui doit correspondre à la clé primaire de la racine et donc ne peut pas être à 0 mais au minimum 1.

Voilà, je sais pas si cette solution te convient, je n'en vois pas d'autre simple sans passer par des procédures stockées : il n'est peut-être pas nécessaire de sortir l'artillerie lourde à ce stade....

______________________________________________________________
Une question bien formulée, c'est un problème bien compris : ça représente déjà les 3/4 de la réponse ;)

Options: ReplyQuote


Subject
Views
Written By
Posted
4625
September 10, 2007 08:18AM
3351
September 10, 2007 11:59AM
3088
September 10, 2007 01:17PM
Re: Categories avec Parent HowTo
3052
September 10, 2007 02:07PM
3150
September 10, 2007 02:59PM
3221
September 11, 2007 06:16AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.