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;
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;
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
 
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
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 ?

J'ai les variables saisies suivantes
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
Quelle est la solution ?
Merci d'avance