Bonjour,
Je développe une application qui gère les ordres de missions d'agents sous Php/mysql.
La règle est chaque agent peut avoir plusieurs ordres de mission et un ordre de mission peut concerner un ou plusieurs agents
voici la structure des tables
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 -- -- Structure de la table `agent` -- DROP TABLE IF EXISTS `agent`; CREATE TABLE IF NOT EXISTS `agent` ( `agent_id` int(11) NOT NULL AUTO_INCREMENT, `prenom` varchar(255) NOT NULL, `nom` varchar(255) NOT NULL, `fonction` varchar(255) DEFAULT NULL, `sitfamille_id` smallint(6) DEFAULT NULL, `grade_id` smallint(6) DEFAULT NULL, `service_id` int(11) DEFAULT NULL, PRIMARY KEY (`agent_id`), KEY `fk_sitfamille` (`sitfamille_id`), KEY `FK_agent_grade` (`grade_id`), KEY `agnent_direction_ou_serice` (`service_id`) ) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 -- Structure de la table `missions` -- DROP TABLE IF EXISTS `missions`; CREATE TABLE IF NOT EXISTS `missions` ( `mission_id` int(11) NOT NULL AUTO_INCREMENT, `motif` text, `depart_mission` date DEFAULT NULL, `arrivee_mission` date DEFAULT NULL, `moyen_transport` text, `objet` text, `observations` text, `lieu` varchar(255) DEFAULT NULL, `service_id` int(11) DEFAULT NULL, PRIMARY KEY (`mission_id`), KEY `mission_service_origine` (`service_id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;J'ai la requête affichent les missions qui sont en chevauchement jouant sur les dates
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 -- Structure de la table `mission_agents` -- DROP TABLE IF EXISTS `mission_agents`; CREATE TABLE IF NOT EXISTS `mission_agents` ( `agent_id` int(11) NOT NULL, `mission_id` int(11) NOT NULL, PRIMARY KEY (`agent_id`,`mission_id`), KEY `fk_agent_mission1` (`mission_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Maintenant je veux tester si on saisit une mission avec ses participants, de tester pour chaque participant s'il la mission n'est pas en chevauchement avec une autre mission en base de données ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 SELECT S1.nom_service,A.agent_id, A.prenom, A.nom, M1.mission_id AS id_m1,M1.motif as motif1, M1.depart_mission AS depart_m1, M1.arrivee_mission AS arrivee_m1, "en chevauchement avec" as "", M2.mission_id AS id_m2,M2.motif as motif2, M2.depart_mission AS depart_m2, M2.arrivee_mission AS arrivee_m2 FROM mission_agents MA1 INNER JOIN mission_agents MA2 ON MA1.agent_id = MA2.agent_id AND MA1.mission_id < MA2.mission_id INNER JOIN missions M1 ON MA1.mission_id = M1.mission_id INNER JOIN missions M2 ON MA2.mission_id = M2.mission_id INNER JOIN agent A ON MA1.agent_id = A.agent_id INNER JOIN services S1 ON S1.service_id = A.service_id WHERE M1.depart_mission <= M2.arrivee_mission AND M1.arrivee_mission >= M2.depart_mission
J'ai les variables saisies suivantes
Quelle est la solution ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 date_dept_mission : $("#date_dept_mission").val() :date de depart de la mission saisie date_arriv_mission : $("#date_arriv_mission").val():date d'arrivée de la mission saisie participants: $("#participants").val(): Liste des agents avec comme valeur de chaque élément l'agent_id de m'agent
Merci d'avance
Partager