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 :

Récupérer toutes les réservations selon deux dates données


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2023
    Messages : 2
    Points : 0
    Points
    0
    Par défaut Récupérer toutes les réservations selon deux dates données
    Bonjour, après avoir cherché une réponse à mon problème pendant des heures et en désespoir de cause avoir demandé à tchatGPT, je fais appel à vos services car je ne comprends pas mon erreur de logique et TchatGPT non plus.

    Je vous explique mon problème, j'ai une table t_chauffeur qui liste tous les chauffeurs et une table qui t_dispo_chauffeur qui liste toutes les disponibilités des chauffeurs avec des champs date_debut et date_fin qui représentent interval de temps où il sont disponibles

    je voudrais juste faire une requête sql qui me permettrait de récupérer tous les chauffeurs disponibles pour une période donnée.

    Le code que j'ai écris devrais normalement me renvoyer les informations du chauffeur dont la ref_chauffeur et donc id=1 qui est disponible du 2023-09-01 au 2023-09-30 hors j'ai un tableau vide quand je débug mon code que voici :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    $date_debut = "2023-09-15";
    $date_fin = "2023-09-30";
    $ref_chauffeur = "1";
     
    $req = $pdo->prepare('
        SELECT c.*
        FROM t_chauffeur c
        LEFT JOIN t_dispo_chauffeur d ON c.id = d.ref_chauffeur
        WHERE (
            c.id = :ref_chauffeur
            AND (
                d.ref_chauffeur IS NULL
                OR (
                    :date_debut > d.date_fin
                    OR :date_fin < d.date_debut
                )
            )
        )
    ');
     
    $req->execute([
        'date_debut' => $date_debut,
        'date_fin' => $date_fin,
        'ref_chauffeur' => $ref_chauffeur
    ]);
     
    $chauffeurs_disponibles = $req->fetchAll();
    debug($chauffeurs_disponibles);
    die();
    Un grand merci pour votre temps

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Points : 1 876
    Points
    1 876
    Par défaut
    Sans connaître la structure des tables et leur contenu c'est difficile. Je commencerais par exécuter le code SQL seul, en retirant des critères de sélection un par un, jusqu'à ce que ça retourne quelque chose.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2023
    Messages : 2
    Points : 0
    Points
    0
    Par défaut Merci beaucoup
    Finalement j'ai résolu le problème en décomposant mes requêtes en plusieurs requêtes puis en comparent les résultats, c'est moins élégant, mais ça fonctionne.
    Les jointure de table c'est compliqué

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 224
    Points
    8 224
    Billets dans le blog
    17
    Par défaut
    On aurait pu t'aider si tu avais fourni :
    -- La structure des tables
    -- Un échantillon de données significatif
    -- Le résultat attendu selon l'échantillon
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 910
    Points
    38 910
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par boostdenergie Voir le message
    Finalement j'ai résolu le problème en décomposant mes requêtes en plusieurs requêtes puis en comparent les résultats, c'est moins élégant, mais ça fonctionne.
    Les jointure de table c'est compliqué
    Les jointures c'est très simple quand on a appris à les utiliser, il existe des tutoriels sur ce site dans la section "langage SQL", et la maîtrise des jointures est indispensable à tout développeur (mais pas seulement).

    Voir ICI

  6. #6
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 066
    Points
    19 066
    Par défaut
    Salut à tous.

    Citation Envoyé par boostdenergie
    et en désespoir de cause avoir demandé à tchatGPT, je fais appel à vos services car je ne comprends pas mon erreur de logique et TchatGPT non plus.
    Quelle est cette habitude d'interroger une IA pour faire votre travail ?
    Et en désespoir de cause, on se rabat sur ceux qui savent.
    Ne serait-il pas plus intelligent d'apprendre par vous même plutôt que d'être dépendant d'une machine ?
    Et si la machine dit de sauter dans le vide, vous sautez ?

    Citation Envoyé par boostdenergie
    Les jointure de table c'est compliqué
    Ce n'est pas du tout compliqué, tout au contraire, c'est simple et utile à la fois.

    a) vos dates doivent être dans le type "date" ou si vous avez aussi les heures dans le type "datetime".
    b) vérifier pour la sélection de votre période que vous avez bien le même critère ":date_debut <= :date_fin".
    c) faites de même avec : "date_debut <= date_fin".
    d) En supposant que les trois premières propositions soient vrai alors vous faites :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        d.date_deb < :date_fin
    and d.date_fin > :date_deb;
    Voici un exemple qui fonctionne :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    drop table if exists `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    ( `id`        integer unsigned  NOT NULL AUTO_INCREMENT PRIMARY KEY,
      `date_deb`  datetime          NOT NULL,
      `date_fin`  datetime          NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `test` (`date_deb`,`date_fin`) values
      ('2016-01-03 11:00:00', '2016-01-03 17:00:00'),
      ('2016-01-12 14:00:00', '2016-01-13 19:00:00'),
      ('2016-01-15 15:00:00', '2016-01-15 16:00:00')
    --------------
     
    --------------
    select * from test
    --------------
     
    +----+---------------------+---------------------+
    | id | date_deb            | date_fin            |
    +----+---------------------+---------------------+
    |  1 | 2016-01-03 11:00:00 | 2016-01-03 17:00:00 |
    |  2 | 2016-01-12 14:00:00 | 2016-01-13 19:00:00 |
    |  3 | 2016-01-15 15:00:00 | 2016-01-15 16:00:00 |
    +----+---------------------+---------------------+
    --------------
    set @peri_deb = '2016-01-12 07:00:00'
    --------------
     
    --------------
    set @peri_fin = '2016-01-13 20:00:00'
    --------------
     
    --------------
    select * from test where date_deb < @peri_fin and date_fin > @peri_deb
    --------------
     
    +----+---------------------+---------------------+
    | id | date_deb            | date_fin            |
    +----+---------------------+---------------------+
    |  2 | 2016-01-12 14:00:00 | 2016-01-13 19:00:00 |
    +----+---------------------+---------------------+
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...
    Cordialement.
    Artemus24.
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

Discussions similaires

  1. Récupérer tous les jours entre deux dates
    Par GsusNET dans le forum Développement
    Réponses: 7
    Dernier message: 26/07/2023, 11h44
  2. Lister les mois-année entre deux dates données
    Par Andry dans le forum Langage
    Réponses: 9
    Dernier message: 16/03/2009, 08h37
  3. Récupérer toutes les données en une fois depuis la base.
    Par zuzuu dans le forum Persistance des données
    Réponses: 3
    Dernier message: 10/03/2009, 11h41
  4. Réponses: 2
    Dernier message: 25/02/2008, 23h40
  5. [Utilisation] Récupérer les modifications depuis une date donnée
    Par Sapience dans le forum CVS
    Réponses: 1
    Dernier message: 15/02/2006, 12h08

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