Partage
  • Partager sur Facebook
  • Partager sur Twitter

Jointure sur un champ qui correspond

soit à une table, soit à une autre

Sujet résolu
    6 décembre 2010 à 13:50:20

    Bonjour,

    J'ai un petit souci en SQL.

    J'ai ma table principale nommée gesfi : le champ qui nous intéresse est id_action qui est de type VARCHAR.
    Il peut y avoir comme valeurs (exemples) : 02ACTION, 04ACTIV, 9999ACTION....

    Le "ACTION" ou "ACTIV" détermine la nature de l'objet. Seulement pour connaître la dénomination complète de l'action ou l'activité il faut chercher dans les tables gesfi_actions ou gesfi_activites.

    Donc si c'est 02ACTION il faut aller chercher cette valeur dans la table gesfi_actions.

    Seulement comme c'est soit l'un soit l'autre on ne peut pas faire de jointure interne simple (enfin je crois).

    Comment dois-je faire ? Merci. :)
    • Partager sur Facebook
    • Partager sur Twitter
      6 décembre 2010 à 13:55:42

      Tu sais me montrer la erquete que tu voudrais faire si tu devais aller chercher que sur gesfi_actions ?
      • Partager sur Facebook
      • Partager sur Twitter
        6 décembre 2010 à 14:04:24

        Oui, si je devais le faire avec seulement gesfi_actions voici ce que ça donnerait (j'ai simplifié en supprimant les SELECT et WHERE qui n'ont pas raison d'être ici).

        SELECT gesfi.*,gesfi_actions 
        FROM gesfi,gesfi_actions.help_action 
        WHERE gesfi.id_action = gesfi_actions.id_action
        
        • Partager sur Facebook
        • Partager sur Twitter
          6 décembre 2010 à 14:06:23

          SELECT gesfi.*,gesfi_actions FROM gesfi,gesfi_actions.help_action WHERE gesfi.id_action = gesfi_actions.id_action
          UNION
          SELECT gesfi.*,gesfi_activites FROM gesfi,gesfi_activites.help_action WHERE gesfi.id_action = gesfi_activites.id_action
          
          • Partager sur Facebook
          • Partager sur Twitter
            6 décembre 2010 à 14:14:58

            Ok merci et si je veux mettre un autre WHERE qui correspond à tout le résultat je le mets à quel endroit ? Ou même une autre table qui n'a rien à voir ?
            • Partager sur Facebook
            • Partager sur Twitter
              6 décembre 2010 à 14:21:07

              Tu peux refaire un SELECT ... FROM (SELECT... UNION SELECT...) as table_intermediaire WHERE table_intermediaire.champ = ce_que_tu_veux

              Note bien le "as table_intermediaire". Il faut absolument donner un alias aux tables résultats des sous-requetes.
              • Partager sur Facebook
              • Partager sur Twitter
                7 décembre 2010 à 9:20:41

                J'ai essayé ceci et soit phpMyAdmin revient à la page d'accueil soit il me marque "MySQL server has gone away".

                SELECT gesfi2010.* 
                FROM (
                	SELECT gesfi2010 . * , gesfi_actions.help_action
                	FROM gesfi2010, gesfi_actions
                	WHERE gesfi2010.id_action = gesfi_actions.id_action
                	UNION 
                	SELECT gesfi2010 . * , gesfi_activites.help_activite
                	FROM gesfi2010, gesfi_activites
                	WHERE gesfi2010.id_action = gesfi_activites.id_activite
                	) as table_actions, gesfi2010 
                WHERE gesfi2010.date_jour BETWEEN '2010-01-01' AND '2010-02-07' 
                AND gesfi2010.id_pers = 62 
                ORDER BY id_pers,date_jour
                


                Quel est le problème avec ma requête ?
                • Partager sur Facebook
                • Partager sur Twitter
                  7 décembre 2010 à 9:31:38

                  Dans la requete principale, tu fais une jonction entre table_actions et gesfi2010, mais tu n'indiques pas sur quoi dans la clause WHERE.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    7 décembre 2010 à 9:42:20

                    Ok mais comment je fais puisque les clés primaires dans gesfi_actions et gesfi_activites n'ont pas le même nom ? Faure faire un AS et les nommer pareil ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      7 décembre 2010 à 9:48:44

                      Ok, voici ce que j'ai :

                      SELECT gesfi2010.* 
                      FROM (
                      	SELECT gesfi2010 . * , gesfi_actions.id_action AS id_act, gesfi_actions.help_action
                      	FROM gesfi2010, gesfi_actions
                      	WHERE gesfi2010.id_action = gesfi_actions.id_action
                      	UNION 
                      	SELECT gesfi2010 . * , gesfi_activites.id_activite AS id_act, gesfi_activites.help_activite
                      	FROM gesfi2010, gesfi_activites
                      	WHERE gesfi2010.id_action = gesfi_activites.id_activite
                      	) as table_actions, gesfi2010 
                      WHERE gesfi2010.id_action = table_actions.id_act 
                      AND gesfi2010.date_jour BETWEEN '2010-01-01' AND '2010-02-07' 
                      AND gesfi2010.id_pers = 62 
                      ORDER BY id_pers,date_jour
                      


                      Cela me renvoie 36 000+ lignes, qu'est-ce qui cloche ? J'ai en fait besoin de récupérer la colonne help en fonction de l'id (action ou activite toujours...).
                      • Partager sur Facebook
                      • Partager sur Twitter
                        7 décembre 2010 à 9:50:51

                        Tu saurais me filer la structure de tes 3 tables et un jeu de données ??
                        • Partager sur Facebook
                        • Partager sur Twitter
                          7 décembre 2010 à 9:58:30

                          Ok.

                          Le champ s'appelle id_action mais il peut correspondre à une activité, dans l'idéal il aurait pu s'appeller id_action_activite


                          gesfi2010


                          Image utilisateur

                          gesfi_actions


                          Image utilisateur

                          gesfi_activites


                          Image utilisateur

                          Si tu veux ça en SQL dis-le moi. Encore merci.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            7 décembre 2010 à 9:59:34

                            Waip, ce serait plus simple en SQL, comme ça je peux faire des essais facilement.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              7 décembre 2010 à 10:07:42

                              Ca marche.

                              C'est vraiment à titre indicatif, puisque tu te doutes que des ID vont pas correspondre, je n'ai pas tout mis car ce serait trop long. ;)

                              gesfi2010


                              CREATE TABLE IF NOT EXISTS `gesfi2010` (
                                `id_inv` int(11) NOT NULL AUTO_INCREMENT,
                                `id_pers` int(11) NOT NULL,
                                `date_jour` date DEFAULT NULL,
                                `memo` varchar(255) DEFAULT NULL,
                                `tps` int(11) DEFAULT NULL,
                                `id_action` varchar(30) DEFAULT NULL,
                                `detail1` varchar(30) DEFAULT NULL,
                                `detail2` varchar(30) DEFAULT NULL,
                                `fin1` int(11) DEFAULT NULL,
                                `fin1_tps` int(11) DEFAULT NULL,
                                `fin2` int(11) DEFAULT NULL,
                                `fin2_tps` int(11) DEFAULT NULL,
                                `valide` int(11) DEFAULT NULL,
                                `modif` int(11) DEFAULT NULL,
                                PRIMARY KEY (`id_inv`)
                              ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=31537 ;
                              
                              --
                              -- Contenu de la table `gesfi2010`
                              --
                              
                              INSERT INTO `gesfi2010` (`id_inv`, `id_pers`, `date_jour`, `memo`, `tps`, `id_action`, `detail1`, `detail2`, `fin1`, `fin1_tps`, `fin2`, `fin2_tps`, `valide`, `modif`) VALUES
                              (21174, 57, '2010-01-04', NULL, 4, '13ACTIV', '01SG', '0', 1, 0, 0, 0, 1, 0),
                              (21175, 57, '2010-01-04', NULL, 4, '12ACTIV', '0', '0', 1, 0, 0, 0, 1, 0),
                              (21495, 38, '2010-01-04', NULL, 4, '13ACTIV', '01SG', '0', 1, 0, 0, 0, 1, 0),
                              (21496, 38, '2010-01-04', NULL, 4, '26ACTION', '03ACTION', '0', 1, 0, 0, 0, 1, 0),
                              (23030, 71, '2010-01-04', NULL, 4, '26ACTION', '03ACTION', '0', 1, 0, 0, 0, 1, 0),
                              (23031, 71, '2010-01-04', NULL, 2, '24ACTION', '01ACTION', '0', 1, 0, 0, 0, 1, 0),
                              (23032, 71, '2010-01-04', NULL, 2, '14ACTIV', '04UE', '0', 33, 2, 0, 0, 1, 0),
                              (22157, 60, '2010-01-04', 'démat', 2, '48ACTIV', '08INFO', '0', 6, 2, 0, 0, 1, 0),
                              (22158, 60, '2010-01-04', NULL, 2, '26ACTION', '03ACTION', '0', 1, 0, 0, 0, 1, 0),
                              (22159, 60, '2010-01-04', NULL, 4, '14ACTIV', '04UE', '0', 33, 4, 0, 0, 1, 0),
                              (24259, 139, '2010-01-04', NULL, 2, '09ACTIV', '0', '0', 1, 0, 0, 0, 1, 0),
                              (24260, 139, '2010-01-04', NULL, 6, '27ACTION', '01ACTION', '0', 1, 0, 0, 0, 1, 0),
                              (14821, 36, '2010-01-04', NULL, 3, '02ACTIV', '03CONF', '01CONF', 1, 0, 0, 0, 1, 0),
                              (14822, 36, '2010-01-04', NULL, 4, '07ACTIV', '0', '0', 1, 0, 0, 0, 1, 0),
                              (14823, 36, '2010-01-04', NULL, 1, '17ACTIV', '0', '0', 1, 0, 0, 0, 1, 0),
                              (14824, 62, '2010-01-04', 'Ouverture 2010', 6, '48ACTIV', '01INFO', '0', 1, 0, 0, 0, 1, 0),
                              (14825, 62, '2010-01-04', 'OW+DP outlook recopie structure n+1', 1, '48ACTIV', '02INFO', '0', 1, 0, 0, 0, 1, 0),
                              (14826, 62, '2010-01-04', 'IPhone HHDF sync 3jours', 1, '48ACTIV', '08INFO', '0', 1, 0, 0, 0, 1, 0),
                              (14827, 121, '2010-01-04', 'Modifs fiches guide syndical CAPEB', 3, '13ACTIV', '04SG', '0', 1, 0, 0, 0, 1, 0),
                              (14828, 121, '2010-01-04', 'Prépa réunion cour des comptes bordeaux 120110', 1, '22ACTION', '02ACTION', '0', 5, 1, 0, 0, 1, 0),
                              (14829, 121, '2010-01-04', 'Correction circulaire developpeurs alternance', 1, '22ACTION', '03ACTION', '0', 5, 1, 0, 0, 1, 0),
                              (14830, 121, '2010-01-04', NULL, 3, '13ACTIV', '01SG', '0', 1, 0, 0, 0, 1, 0),
                              (14831, 292, '2010-01-04', NULL, 3, '37ACTION', '02ACTION', '0', 1, 0, 0, 0, 1, 0),
                              (14832, 292, '2010-01-04', NULL, 5, '37ACTION', '04ACTION', '0', 1, 0, 0, 0, 1, 0),
                              (14833, 127, '2010-01-04', NULL, 1, '22ACTION', '05ACTION', '0', 5, 1, 0, 0, 1, 0),
                              (14834, 127, '2010-01-04', 'titres APCM concerne les 2 UNA 3E et CPC', 1, '15ACTIV', '03UNA', '04UNA', 1, 1, 0, 0, 1, 0),
                              (14835, 127, '2010-01-04', NULL, 2, '17ACTIV', '0', '0', 1, 0, 0, 0, 1, 0),
                              (14836, 127, '2010-01-04', 'Point avec L.Aubert : probtp, développeurs, VAE', 4, '22ACTION', '02ACTION', '0', 5, 4, 0, 0, 1, 0),
                              (14837, 271, '2010-01-04', NULL, 8, '03ACTIV', '0', '0', 1, 0, 0, 0, 1, 0),
                              (14843, 43, '2010-01-04', NULL, 1, '17ACTIV', '0', '0', 1, 0, 0, 0, 1, 0),
                              (14844, 43, '2010-01-04', NULL, 2, '13ACTIV', '01SG', '0', 1, 0, 0, 0, 1, 0),
                              (14845, 43, '2010-01-04', NULL, 5, '01ACTIV', '02COM', '0', 1, 0, 0, 0, 1, 0),
                              (14882, 296, '2010-01-04', NULL, 1, '46ACTION', '01ACTION', '0', 6, 1, 0, 0, 1, 0),
                              (14883, 296, '2010-01-04', NULL, 3, '02ACTION', '01ACTION', '0', 6, 3, 0, 0, 1, 0),
                              (14884, 296, '2010-01-04', 'bilan', 4, '22ACTION', '03ACTION', '0', 38, 4, 0, 0, 1, 0),
                              (14910, 19, '2010-01-04', NULL, 4, '07ACTIV', '0', '0', 1, 0, 0, 0, 1, 0),
                              (14911, 19, '2010-01-04', NULL, 2, '05ACTIV', '03INFOCOM', '0', 1, 0, 0, 0, 1, 0),
                              (14912, 19, '2010-01-04', NULL, 2, '17ACTIV', '0', '0', 1, 0, 0, 0, 1, 0),
                              (14952, 307, '2010-01-04', NULL, 4, '55ACTIV', '01FDR', '02FDR', 1, 0, 0, 0, 1, 0);
                              


                              gesfi_actions


                              CREATE TABLE IF NOT EXISTS `gesfi_actions` (
                                `id_action` varchar(10) NOT NULL,
                                `help_action` varchar(255) NOT NULL,
                                `bighelp_action` varchar(255) NOT NULL,
                                `financement` int(11) NOT NULL,
                                `alpha_tri` varchar(20) NOT NULL,
                                `type_action` varchar(10) NOT NULL,
                                `detail` varchar(20) NOT NULL,
                                `active` int(11) NOT NULL,
                                `service` varchar(20) DEFAULT NULL,
                                `annee` varchar(50) DEFAULT NULL,
                                PRIMARY KEY (`id_action`)
                              ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
                              
                              --
                              -- Contenu de la table `gesfi_actions`
                              --
                              
                              INSERT INTO `gesfi_actions` (`id_action`, `help_action`, `bighelp_action`, `financement`, `alpha_tri`, `type_action`, `detail`, `active`, `service`, `annee`) VALUES
                              ('30ACTION', 'Le prisme de la Réhabilitation', '', 1, 'Le prisme ', 'TOUR', 'ACTION', 0, 'SAE;SG;COM', '03;04;05;06;07'),
                              ('29ACTION', 'Le net du Bâtiment', '', 1, 'Le net du ', 'TOUR', 'ACTION', 1, 'CI;SG', '03;04;05;06;07;08;09;10'),
                              ('28ACTION', 'Traitement et analyses statistiques', '', 1, 'Traitement', 'TOUR', 'ACTION', 1, NULL, '06;07;08;09;10'),
                              ('27ACTION', 'Études Économiques', '', 1, 'Études Éco', 'TOUR', 'ACTION', 1, NULL, '06;07;08;09;10'),
                              ('26ACTION', 'ISABAT', '', 1, 'ISABAT', 'TOUR', 'ACTION', 1, 'TOUS', '03;04;05;06;07;08;09;10'),
                              ('25ACTION', 'Pôle Innovation Santé Sécurité', '', 1, 'Pôle Innov', 'TOUR', 'ACTION', 0, NULL, '06'),
                              ('24ACTION', 'Gestion des fichiers de la CAPEB', '', 1, 'Gestion de', 'TOUR', 'ACTION', 1, 'CI;SG', '03;04;05;06;07;08;09;10'),
                              ('23ACTION', 'GEAB', '', 1, 'GEAB', 'BI', 'ACTION', 1, 'FORM;SG;COM', '03;04;05;06;07;08;09;10'),
                              ('22ACTION', 'Formation des Salariés', '', 1, 'Formation ', 'TOUR', 'ACTION', 1, 'TOUS', '03;04;05;06;07;08;09;10'),
                              ('21ACTION', 'Formation des Elus, Ecole des Cadres', '', 1, 'Formation ', 'BI', 'ACTION', 1, 'FORM;SG;COM', '03;04;05;06;07;08;09;10'),
                              ('20ACTION', 'Formation des Artisans', '', 1, 'Formation ', 'TOUR', 'ACTION', 1, 'TOUS', '03;04;05;06;07;08;09;10'),
                              ('19ACTION', 'Fédération Française des Artisans Coopérateurs du Bâtiment', '', 1, 'Fédération', 'TOUR', 'ACTION', 1, 'SAE;SG', '03;04;05;06;07;08;09;10'),
                              ('18ACTION', 'Environnement, Déchets, Haute Qualité Envirronementale, Energies Renouvelables', '', 1, 'Environnem', 'BI', 'ACTION', 0, 'SATP;SG;COM', '03'),
                              ('17ACTION', 'Emploi et Insertion', '', 6, 'Emploi et ', 'BI', 'ACTION', 1, 'FORM;SAJS;SG;COM', '03;04;05;06;07;08;09;10'),
                              ('16ACTION', 'ACOSS / INRS / CSPRP', '', 1, 'ACOSS / IC', 'TOUR', 'ACTION', 1, 'SAJS;SG;COM', '05;06;07;08;09;10'),
                              ('15ACTION', 'Contrat d''Etudes Prospectives', '', 1, 'Contrat d''', 'TOUR', 'ACTION', 0, 'FORM;SG;COM', '03;04;05;06;07'),
                              ('14ACTION', 'Construction Bois Isolation Thermique', '', 1, 'Constructi', 'TOUR', 'ACTION', 0, 'SATP;SG;COM', '03;04;05;06;07'),
                              ('13ACTION', 'Réseau Acteur Bois Construction', '', 1, 'Réseau Act', 'TOUR', 'ACTION', 0, 'SATP;SG;COM', '03;04;05;06;07'),
                              ('12ACTION', 'CNATP', '', 1, 'CNATP', 'BI', 'ACTION', 1, 'TOUS', '03;04;05;06;07;08;09;10'),
                              ('11ACTION', 'CNAMTS', '', 1, 'CNAMTS', 'TOUR', 'ACTION', 1, 'SAJS;SG;COM', '03;04;05;06;07;08;09;10'),
                              ('10ACTION', 'CNAF', '', 1, 'CNAF', 'TOUR', 'ACTION', 1, 'SAJS;SG;COM', '03;04;05;06;07;08;09;10'),
                              ('09ACTION', 'Charte ''Réseau''', '', 1, 'Charte "Ré', 'BI', 'ACTION', 0, 'TOUS', '03;04;05;06;07'),
                              ('08ACTION', 'Bâtimat', '', 1, 'Bâtimat', 'TOUR', 'ACTION', 1, 'TOUS', '03;04;05;06;07;08;09;10'),
                              ('07ACTION', 'Artisans Messagers', '', 6, 'Artisans M', 'BI', 'ACTION', 1, 'FORM;SG;COM', '03;04;05;06;07;08;09;10'),
                              ('06ACTION', 'Apprentissage et Formation initiale', '', 1, 'Apprentiss', 'BI', 'ACTION', 1, 'FORM;SG;COM', '03;04;05;06;07;08;09;10'),
                              ('05ACTION', 'ANAH', '', 1, 'ANAH', 'TOUR', 'ACTION', 1, 'SAE;SG', '03;04;05;06;07;08;09;10'),
                              ('04ACTION', 'Activité de normalisation', '', 1, 'Activité d', 'TOUR', 'ACTION', 1, 'SATP;SAE;SG', '03;04;05;06;07;08;09;10'),
                              ('03ACTION', 'ACOSS / INRS / ANACT', '', 1, 'ACOSS / IN', 'TOUR', 'ACTION', 0, 'SAJS;SG;COM', '03;04;05;06;07'),
                              ('02ACTION', 'Accès des Femmes aux métiers du bâtiment', '', 6, 'Accès des ', 'BI', 'ACTION', 1, 'TOUS', '03;04;05;06;07;08;09;10'),
                              ('01ACTION', 'AB 5, Certification de service', '', 6, 'AB 5', 'BI', 'ACTION', 1, 'SAE;SG;COM', '03;04;05;06;07;08;09;10'),
                              ('31ACTION', 'Gestion de l''entreprise', '', 1, 'Gestion de', 'TOUR', 'ACTION', 1, NULL, '06;07;08;09;10'),
                              ('32ACTION', 'PACT ARIM', '', 1, 'PACT ARIM', 'BI', 'ACTION', 1, 'SAE;SG;COM', '03;04;05;06;07;08;09;10'),
                              ('33ACTION', 'PGN - PGP', '', 1, 'PGN - PGP', 'TOUR', 'ACTION', 0, 'TOUS', '03;04;05;06'),
                              ('34ACTION', 'Promotion des filières professionnelles', '', 6, 'Promotion ', 'TOUR', 'ACTION', 0, 'TOUS', '03;04;05;06;07');
                              


                              gesfi_activites


                              CREATE TABLE IF NOT EXISTS `gesfi_activites` (
                                `id_activite` varchar(50) NOT NULL,
                                `help_activite` varchar(255) NOT NULL,
                                `bighelp_activite` text NOT NULL,
                                `financement` int(11) NOT NULL,
                                `alpha_tri` varchar(20) NOT NULL,
                                `type_activite` varchar(10) NOT NULL,
                                `detail` varchar(20) NOT NULL,
                                `help_detail1` text NOT NULL,
                                `help_detail2` text NOT NULL,
                                `active` int(11) NOT NULL,
                                `annee` varchar(50) NOT NULL,
                                PRIMARY KEY (`id_activite`)
                              ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
                              
                              --
                              -- Contenu de la table `gesfi_activites`
                              --
                              
                              INSERT INTO `gesfi_activites` (`id_activite`, `help_activite`, `bighelp_activite`, `financement`, `alpha_tri`, `type_activite`, `detail`, `help_detail1`, `help_detail2`, `active`, `annee`) VALUES
                              ('00ACTIV', 'Journée Non Saisie', 'Utilisé pour des besoins d''harmonisation de la base de données de GesFI\nCette activité n''est pas censée être utilisée pour la saisie de vos journées-type.', 1, 'zNon Saisi', 'BI', 'NO', 'Pas de détail', '', 0, '03;04;05;06;07'),
                              ('01ACTIV', 'Communication Institutionnelle / Relations Presse', 'Participation à des congrès ou à des salons, conception, édition de plaquettes institutionnelles, CAPEB La lettre, relations Presse, etc.', 1, 'Communicat', 'TOUR', 'COM', '<b><u>Détail 1 :</u></b><br />– Relations Presse<br />– La Lettre<br />– Plaquettes / Guides / Ouvrages<br />– Congrès', '', 1, '03;04;05;06;07;08;09;10'),
                              ('02ACTIV', 'Assemblées Générales / CA / Bureau et Commissions de la Confédération', 'Préparation, participation et travaux post-réunions à l''Assemblée Générale, au Conseil d''Administration, au Bureau et aux Commissions de la Confédération : CNAGS, CNAE, CNAS, etc.', 1, 'Assemblées', 'TOUR', 'CONF', '<b><u>Détail 1 :</u></b><br />– Assemblée générale<br />– Bureau confédéral<br />– CNAGS<br />– CNAS<br />– CNAE<br />– CNFA<br />– Commission d''arbitrage<br />– Conseil d''administration<br />– Conseil des Professions<br />– Conseil interrégional', '<b><u>Détail 2 :</u></b><br />– Travaux préparatoires<br />– Organisation de la réunion<br />– Participation à la réunion<br />– Travaux post-réunion', 1, '03;04;05;06;07;08;09;10'),
                              ('03ACTIV', 'Congés', 'Congés payés et congés pour événements personnels (mariage, naissance, déménagement, maladie d''un enfant, etc.)', 1, 'Congés', 'BI', 'NO', 'Pas de détail', '', 1, '03;04;05;06;07;08;09;10'),
                              ('04ACTIV', 'Développement / Recherche de Subventions et de Financements', 'Recherche de subventions, réponse à des appels d''offres, soutien au réseau, diffusion des bonnes pratiques', 1, 'Développem', 'TOUR', 'NO', 'Pas de détail', '', 1, '03;04;05;06;07;08;09;10'),
                              ('05ACTIV', 'Information / Communication avec le réseau CAPEB', 'Rédaction de circulaires ou de CAPEB INFO, rédaction d''articles pour le Bâtiment Artisanal', 1, 'Informatio', 'BI', 'INFOCOM', '<b><u>Détail 1 :</u></b><br />– Bâtiment Artisanal<br />– Circulaires / CAPEB Info<br />– Autres', '', 1, '07;08;09;10'),
                              ('06ACTIV', 'Maladie', '', 1, 'Maladie', 'BI', 'NO', 'Pas de détail', '', 1, '03;04;05;06;07;08;09;10'),
                              ('07ACTIV', 'Réponses aux questions ''techniques'' du Réseau CAPEB', 'Questions juridiques, sociales, économiques, techniques ou professionnelles\nen dehors des ''Actions'' faisant l''objet d''un développement spécifique)', 1, 'Réponses a', 'BI', 'NO', 'Pas de détail', '', 1, '03;04;05;06;07;08;09;10'),
                              ('08ACTIV', 'Relations générales avec le Réseau', '(en dehors des ''Actions'' faisant l''objet d''un développement spécifique et de ''Réponses aux questions "techniques" du Réseau CAPEB'')\nContacts avec les syndicats départementaux ou régionaux, réunions d''information régionales ou inter-régionales, accompagnem', 1, 'Relations ', 'TOUR', 'RESEAU', '<b><u>Détail 1 :</u></b><br />– Accompagnement terrain<br />– Réunions régionales et inter-régionales<br />– Autres', '', 1, '03;04;05;06;07;08;09;10'),
                              ('09ACTIV', 'Réunions de service', '', 1, 'Réunions d', 'TOUR', 'NO', 'Pas de détail', '', 1, '03;04;05;06;07;08;09;10'),
                              ('10ACTIV', 'Récupération du Temps de Travail', '', 1, 'Récupérati', 'BI', 'NO', 'Pas de détail', '', 1, '03;04;05;06;07;08;09;10'),
                              ('11ACTIV', 'Salons / Congrès', 'Organisation des salons, participation aux stands, salons et congrès', 1, 'Salons / C', 'BI', 'NO', 'Pas de détail', '', 1, '03;04;05;06;07;08;09;10'),
                              ('12ACTIV', 'Animation / Management / Suivi de l''activité du service', 'Suivi et animation des collaborateurs, gestion des priorités, entretiens d''évaluation, bilans, élaboration et suivi du budget, intégration de nouveaux collaborateurs, organisation et fonctionnement du service, mise en place de procédures et de process int', 1, 'Animation ', 'TOUR', 'NO', 'Pas de détail', '', 1, '03;04;05;06;07;08;09;10'),
                              ('13ACTIV', 'Secrétariat Général', 'Participation aux comités de direction, interventions et travaux à la demande du secrétariat général, comité de relecture du BA, etc…', 1, 'Secrétaria', 'BI', 'SG', '<b><u>Détail 1 :</u></b><br />– Comité de direction<br />– Comité de relecture BA<br />– Organisation<br />– Travaux<br />– Divers', '', 1, '03;04;05;06;07;08;09;10'),
                              ('14ACTIV', 'Europe', 'Représentation à Bruxelles, ABC, UAPME, NORMAPME, suivi des travaux européens, Lobbying', 1, 'Europe', 'TOUR', 'UE', '<b><u>Détail 1 :</u></b><br />– CESE<br />– Commission Européenne<br />– EBC<br />– UEAPME<br />– NORMAPME<br />– Autres', '', 1, '03;04;05;06;07;08;09;10'),
                              ('15ACTIV', 'Politique Professionnelle / UNA', 'Politique Professionnelle, politique Formation, groupes de travail, réunions régionales, etc.', 1, 'Politique ', 'BI', 'UNA', '<b><u>Détail 1 :</u></b><br />– Toutes UNA<br />– UNA MC<br />– UNA CPC<br />– UNA 3E<br />– UNA Métiers de la Pierre<br />– UNA Métiers et Techniques du Plâtre<br />– UNA CMA<br />– UNA Serrurerie Métallerie<br />– UNA PVR', '<b><u>Détail 2 disponible avec tout le Détail 1 :</u></b><br />– Communication<br />– Défense de la Profession, Lobbying<br />– Economique (marchés, filières, assurances)<br />– Formation<br />– Juridique (prévention, …)<br />– Promotion des Métiers<br />', 1, '03;04;05;06;07;08;09;10'),
                              ('16ACTIV', 'Représentation au titre de l''UPA', 'Représentation au sein de différents organismes, au titre de l''UPA', 1, 'Représenta', 'TOUR', 'UPA', '<b><u>Détail 1 :</u></b><br />– Représentation<br />– Négociation<br />– Gestion d''organisme<br />– Autre', '<b><u>Détail 2 :</u></b><br />– Paritaires<br />– Autres<br /><br /><b><u>Disponible avec le détail 1 suivant :</b></u><br />– Négociation<br />– Gestion d''organisme', 1, '03;04;05;06;07;08;09;10'),
                              ('17ACTIV', 'Veille', 'Veille documentaire, participation à des colloques, congrès ou réunions, etc.', 1, 'Veille', 'BI', 'NO', 'Pas de détail', '', 1, '03;04;05;06;07;08;09;10'),
                              ('18ACTIV', 'Groupes de travail avec des Elus de la Confédération', 'Participation à des groupes de travail avec des Elus ne rentrant pas dans le cadre d''une action spécifique, rédaction de notes, comptes-rendus, etc.', 1, 'Groupes de', 'TOUR', 'GROUPE', '<b><u>Détail 1 :</u></b><br />– Groupe Informatique<br />– Groupe Formation<br />– Groupe Patrimoine<br />– Groupe CAPEB-OPBBTP<br />– Groupe Qualité<br />– Groupe des Conseillères CNFA<br />– Groupe Réseau d''artisans<br />– Préparatoires<br />– Autres', '', 1, '03;04;05;06;07;08;09;10'),
                              ('19ACTIV', 'Comité d''entreprise / Délégué du Personnel / Mandat syndical', 'Activité effectuée dans le cadre d''un mandat électif au sein du comité d''entreprise de la CAPEB ou en tant que délégué du personnel de la CAPEB\nActivité effectuée dans le cadre d''un mandat syndical', 1, 'Comité d''e', 'BI', 'NO', 'Pas de détail', '', 1, '03;04;05;06;07;08;09;10'),
                              ('20ACTIV', 'Temps Partiel', 'Jour pris dans le cadre d''une activité à temps partiel', 1, 'Temps Part', 'BI', 'NO', 'Pas de détail', '', 1, '03;04;05;06;07;08;09;10'),
                              ('21ACTIV', 'Formation', 'Interne ou externe', 1, 'Formation', 'BI', 'NO', 'Pas de détail', '', 1, '03;04;05;06;07;08;09;10');
                              
                              • Partager sur Facebook
                              • Partager sur Twitter
                                7 décembre 2010 à 10:22:34

                                SELECT date_jour, id_pers, id_act, help
                                FROM (
                                    SELECT gesfi2010.date_jour, gesfi2010.id_pers , gesfi_actions.id_action AS id_act, gesfi_actions.help_action as help
                                    FROM gesfi2010, gesfi_actions
                                    WHERE gesfi2010.id_action = gesfi_actions.id_action
                                    UNION
                                    SELECT gesfi2010.date_jour, gesfi2010.id_pers , gesfi_activites.id_activite AS id_act, gesfi_activites.help_activite as help
                                    FROM gesfi2010, gesfi_activites
                                    WHERE gesfi2010.id_action = gesfi_activites.id_activite
                                ) AS table_actions
                                WHERE date_jour
                                BETWEEN '2010-01-01'
                                AND '2010-02-07'
                                AND id_pers = 127
                                


                                A mon avis, ceci fait ce que tu veux. Pas besoin de refaire une jointure en fait. Et prend l'habitude de ne pas utiliser *. Nomme tous les champs que tu veux récupérer, comme ça tu est sûr de ce que tu as.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  7 décembre 2010 à 10:36:10

                                  C'est très bien on avance. :)

                                  Maintenant j'aimerais peaufiner la requête en sélectionnant uniquement quelqu'un d'un service en particulier, pour cela j'ai besoin de la table personnes et du champ service. Le lien entre personnes et gesfi2010 est id_pers.

                                  J'ai donc essayé ceci :
                                  SELECT date_jour, gesfi2010.id_pers, id_act, help, personnes.service
                                  FROM (
                                      SELECT gesfi2010.date_jour, gesfi2010.id_pers , gesfi_actions.id_action AS id_act, gesfi_actions.help_action as help
                                      FROM gesfi2010, gesfi_actions
                                      WHERE gesfi2010.id_action = gesfi_actions.id_action
                                      UNION
                                      SELECT gesfi2010.date_jour, gesfi2010.id_pers , gesfi_activites.id_activite AS id_act, gesfi_activites.help_activite as help
                                      FROM gesfi2010, gesfi_activites
                                      WHERE gesfi2010.id_action = gesfi_activites.id_activite
                                  ) AS table_actions, personnes
                                  WHERE gesfi2010.id_pers = personnes.id_pers 
                                  AND date_jour BETWEEN '2010-01-01' AND '2010-02-07' 
                                  AND personnes.service = 'SAAF'
                                  


                                  Il me sort Unknown column 'gesfi2010.id_pers' in 'field list'. Désolé si j'ai du mal mais je ne suis pas habitué à faire des requêtes compliquées. Une fois que j'aurai compris le truc...
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    7 décembre 2010 à 10:38:04

                                    Dans ta requete, tu n'utilises plus gesfi2010, mais table_actions, qui elle contient bien un champ id_pers, qu'elle a récupéré de gesfi2010. C'est donc table_actions.id_pers = personnes.id_pers
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      7 décembre 2010 à 11:17:58

                                      Merci tu m'aides beaucoup.

                                      Peut-être un dernier pour la route :

                                      SELECT date_jour, personnes.nom, personnes.prenom, help, gesfi_details.detail AS help_detail1, gesfi_details2.detail AS help_detail2, table_actions.fin1 AS fin1, table_actions.fin2 AS fin2, personnes.service
                                      FROM (
                                          SELECT gesfi2010.date_jour, gesfi2010.id_pers , gesfi2010.detail1 AS detail1, gesfi2010.detail2 AS detail2, gesfi2010.fin1, gesfi_actions.id_action AS id_act, gesfi_actions.help_action as help
                                          FROM gesfi2010, gesfi_actions, gesfi_financements 
                                          WHERE gesfi2010.id_action = gesfi_actions.id_action
                                      	AND gesfi2010.fin1 = gesfi_financements.id_financement 
                                          UNION
                                          SELECT gesfi2010.date_jour, gesfi2010.id_pers , gesfi2010.detail1 AS detail1, gesfi2010.detail2 AS detail2, gesfi2010.fin2, gesfi_activites.id_activite AS id_act, gesfi_activites.help_activite as help
                                          FROM gesfi2010, gesfi_activites, gesfi_financements 
                                          WHERE gesfi2010.id_action = gesfi_activites.id_activite
                                      	AND gesfi2010.fin2 = gesfi_financements.id_financement 
                                      ) AS table_actions, personnes, gesfi_details, gesfi_details2
                                      WHERE table_actions.detail1 = gesfi_details.id_detail 
                                      AND table_actions.detail2 = gesfi_details2.id_detail 
                                      AND table_actions.id_pers = personnes.id_pers 
                                      AND date_jour BETWEEN '2010-01-01' AND '2010-02-07' 
                                      AND personnes.service = 'SAAF'
                                      


                                      J'aimerais ajouter les financements, j'ai une table financements avec en clé primaire id_financement (l'intitulé qui correspond est help_financement).
                                      gesfi2010 contient fin1 et fin2. Ces 2 champs sont "liés" à la clé primaire id_financement.

                                      J'ai essayé d'établir la requête et j'obtiens Unknown column 'table_actions.fin2' in 'field list'.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        7 décembre 2010 à 11:24:11

                                        Je suis pas sûre de voir tip top ta structure et ce que tu veux. Mais une façon simple de savoir ce que tu as comme colonnes dans table_actions, c'est de prendre la sous-requete (le SELECT... UNION SELECT...) et de la faire dans PhpMyAdmin. Tu sauras exactement ce qui s'y trouve, avec le nom des colonnes.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          7 décembre 2010 à 14:03:48

                                          Merci de ta compétence tu es gentil(le). Je passe en résolu. ;)
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          Jointure sur un champ qui correspond

                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                          • Editeur
                                          • Markdown