doublons...

Eléphant du PHP | 258 Messages

28 juin 2010, 10:03

Bonjour
Je sollicite votre aide pour résoudre un problème. je cherchais une bonne requête qui me permettra d'afficher tous les enregistrements
j'ai 3 tables qui sont reliées entre elles.
la table 'stru' est liée à la table 'agstru' par les deux champs : stru.parent et agstru.stru
ces deux tables contiennent des infos sur les chefs
et la 3ème table 'annuagent' est liée à la table 'agstru' par ces champs : annuagent.indnni et agstru.indnni
cette table contient tous les chefs et salariés.
CREATE TABLE IF NOT EXISTS `annuagent` (
  `indnni` varchar(13) COLLATE latin1_general_cs NOT NULL,
  `civ` varchar(5) COLLATE latin1_general_cs DEFAULT NULL,
  `ainomu` varchar(50) COLLATE latin1_general_cs DEFAULT NULL,
  `aipren` varchar(30) COLLATE latin1_general_cs DEFAULT NULL,
    KEY `ainomu` (`ainomu`),
  KEY `indnni` (`indnni`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs;
CREATE TABLE IF NOT EXISTS `stru` (
  `id` smallint(6) NOT NULL AUTO_INCREMENT,
  `nom` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
  `ordre` smallint(6) NOT NULL,
  `parent` smallint(6) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `parent` (`parent`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=213 ;
CREATE TABLE IF NOT EXISTS `agstru` (
  `indnni` varchar(15) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
  `resp` smallint(6) NOT NULL,
  `stru` smallint(6) NOT NULL,
  PRIMARY KEY (`indnni`,`stru`),
  KEY `indnni` (`indnni`),
  KEY `stru` (`stru`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

d'abord, je crée une simple requete qui va afficher la structure hierarchique (ordre des services)
mysql> select nom, parent, ordre from stru WHERE ordre!="9999" order by parent asc, ordre asc limit 0,20;
voici le resulat de cette requete:
+-----------------------+--------+-------+
| nom                   | parent | ordre |
+-----------------------+--------+-------+
| RECTEUR               |      0 |     0 |
| CABINET DU RECTEUR    |      1 |     1 |
| SG                    |      1 |     2 |
| MEDIATEUR ACADEMIQUE  |      1 |     4 |
| Pole perf             |      1 |     5 |
| pole peda             |      1 |     6 |
| POLE SOCIO EDUCATIF   |      1 |     7 |
| Pôle finances         |      1 |     8 |
| Pole etab             |      1 |     9 |
| Pole perso            |      1 |    10 |
| Pole Orien            |      1 |    11 |
| DRRH                  |      3 |     2 |
| SG D.E.P.             |      3 |     3 |
| DOSA                  |      3 |     3 |
| HYGIENE ET SECURITE   |      3 |     5 |
| Cellule R.H           |      4 |     2 |
| SERVICES DES CONCOURS |      4 |     3 |
| Bureau des IEN-IO     |      8 |     0 |
| Bureau des IEN-ET/EG  |      8 |     0 |
| DATICE                |     11 |     0 |
+-----------------------+--------+-------+
là, tout va bien

maintenant, la deuxième requete va afficher les informations des chefs
pour info, ces chefs ont dans le champ 'resp' supérieur à 1.
mysql> SELECT * FROM agstru ORDER BY stru ASC, resp DESC limit 0,20;
+---------------+------+------+
| indnni        | resp | stru |
+---------------+------+------+
| 1859329047CQH |    4 |    1 |
| 24A9308109NHN |    2 |    1 |
| 24A0830508BXF |    1 |    1 |
| 17A9301930YZI |    3 |    3 |
| 24E0400841MYX |    1 |    3 |
| 24T0629135KQU |    1 |    3 |
| 29E9211553WYS |    1 |    3 |
| 16A0523045YUK |    5 |    4 |
| 24A9306890DGJ |    3 |    4 |
| 24A0730047SMD |    2 |    4 |
| 25E9218759EPF |    3 |    8 |
| 24E9218467EPB |    1 |    8 |
| 24A9307485UIM |    1 |    8 |
| 24A0527725LKT |    1 |    8 |
| 24E9208880QQD |    3 |   11 |
| 25E9213760YVU |    2 |   11 |
| 24E9335643WWJ |    1 |   11 |
| 24E0720494IDV |    3 |   13 |
| 24E9339068LFO |    1 |   13 |
| 24E0823231ULX |    1 |   13 |
+---------------+------+------+
là encore, tout va bien

maintenant, la 3ème requete qui va afficher les chefs dans leurs services avec leur niveau hierarchiquye (resp). plus c'est élevé, plus est plus haut grade de chef
mysql> select indnni , resp, stru, parent from stru, agstru where stru.parent = agstru.stru order by parent asc, ordre asc, resp desc limit 0,20;
+---------------+------+------+--------+
| indnni        | resp | stru | parent |
+---------------+------+------+--------+
| 1859329047CQH |    4 |    1 |      1 |
| 24A9308109NHN |    2 |    1 |      1 |
| 24A0830508BXF |    1 |    1 |      1 |
| 1859329047CQH |    4 |    1 |      1 |
| 24A9308109NHN |    2 |    1 |      1 |
| 24A0830508BXF |    1 |    1 |      1 |
| 1859329047CQH |    4 |    1 |      1 |
| 24A9308109NHN |    2 |    1 |      1 |
| 24A0830508BXF |    1 |    1 |      1 |
| 1859329047CQH |    4 |    1 |      1 |
| 24A9308109NHN |    2 |    1 |      1 |
| 24A0830508BXF |    1 |    1 |      1 |
| 1859329047CQH |    4 |    1 |      1 |
| 24A9308109NHN |    2 |    1 |      1 |
| 24A0830508BXF |    1 |    1 |      1 |
| 1859329047CQH |    4 |    1 |      1 |
| 24A9308109NHN |    2 |    1 |      1 |
| 24A0830508BXF |    1 |    1 |      1 |
| 1859329047CQH |    4 |    1 |      1 |
| 24A9308109NHN |    2 |    1 |      1 |
+---------------+------+------+--------+
20 rows in set (0.01 sec)

là, ce n'est pas bon car dans le champ indnni, j'apercois des doublons alors que je voulais afficher un chef par service

merci encore de votre aide
Cordialement
---------------------------------------------------------
Cyphos utilise
- Firefox et Google Chrome dernière version
- Windows Seven ou Windows XP SP3,
- Wampserver

Eléphant du PHP | 86 Messages

28 juin 2010, 13:50

Et avec un distinct ?

Eléphant du PHP | 258 Messages

28 juin 2010, 14:12

salut skikit

Ca semble fonctionner correctement. je verifie encore pour voir

au début, j'avais pensé à group by mais c'etait pas ca.
ta proposition m'a rappelé
en tout cas, merci
je reviens tout à l'heure
Cordialement
---------------------------------------------------------
Cyphos utilise
- Firefox et Google Chrome dernière version
- Windows Seven ou Windows XP SP3,
- Wampserver