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).
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
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
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 ?
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
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 ?
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...).
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');
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.
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...
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
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'.
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.
× 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.
Tutoriel complet MySQL !
Tutoriel complet MySQL !
Tutoriel complet MySQL !
Tutoriel complet MySQL !
Tutoriel complet MySQL !
Tutoriel complet MySQL !
Tutoriel complet MySQL !
Tutoriel complet MySQL !
Tutoriel complet MySQL !
Tutoriel complet MySQL !