IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Comment savoir si une date saisie est en chevauchement avec une date en base de données en Mysql/php


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2019
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 138
    Points : 39
    Points
    39
    Par défaut Comment savoir si une date saisie est en chevauchement avec une date en base de données en Mysql/php
    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

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 766
    Points : 52 561
    Points
    52 561
    Billets dans le blog
    5
    Par défaut
    Utiliser un déclencheur.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2019
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 138
    Points : 39
    Points
    39
    Par défaut
    Bonjour,

    Où et comment utiliser un déclencheur. J'ai PhpMyadmin en mysql.
    Et comment écrire la requête sachant que ici il suffit de faire tester si la mission saisie par l'utilisateur n'est pas en chevauchement avec une mission déjà enregistrée en base données pour un agent donné?

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 766
    Points : 52 561
    Points
    52 561
    Billets dans le blog
    5
    Par défaut
    La requête doit se baser sur les données en transit dans la transaction (pseudo colonne NEW).

    En pseudo code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Si il existe des lignes dans la requête suivante :
    (
    SELECT *
    FROM   MesPeriodes AS P
    WHERE NEW.Debut >= P.debut AND NEW.Debut < P.fin
        OR  NEW.Fin>= P.debut AND NEW.FIN< P.fin
    )
    Annuler la transaction.
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/07/2011, 16h31
  2. comment savoir qu'une date est un dimanche ?
    Par Ekimasu dans le forum Général Python
    Réponses: 1
    Dernier message: 13/02/2008, 10h53
  3. [Python2.4] Comment savoir si une date est jour férié ou pas ?
    Par Ekimasu dans le forum Général Python
    Réponses: 10
    Dernier message: 30/03/2007, 16h34
  4. Comment savoir qu'une fonction est standard ?
    Par D[r]eadLock dans le forum C
    Réponses: 5
    Dernier message: 24/03/2003, 14h42
  5. Réponses: 4
    Dernier message: 10/09/2002, 17h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo