Rêquete SQl réservation d'autocar

boostdenergie Messages postés 2 Date d'inscription dimanche 17 septembre 2023 Statut Membre Dernière intervention 17 septembre 2023 - 17 sept. 2023 à 14:22
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 6 mai 2024 - 17 sept. 2023 à 16:39

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 :

Un grand merci pour votre aide

$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();

1 réponse

Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 6 mai 2024 656
17 sept. 2023 à 15:38

Bonjour 


cette clause 

d.ref_chauffeur IS NULL

ne sert à rien.

Juste avant il y a 

c.id = :ref_chauffeur

Et tu fais ta jointure sur c.id et d.ref_chauffeur.

Donc  si ref_chauffeur est null, tu te retrouves avec une équation de bool de ce type s = a ( a + b) => s = ab

Et si ref_chaufeur n'est pas null, c'est s = (0 + b) qui donne aussi s = ab.

De plus, sans connaître la,structure de ta base de données ni à quoi correspondent tes champs, pas facile de répondre.

Mais quand je lis 

:date_debut > d.date_fin

ça m'interpelle, littéralement ça dit que le début est après la fin.

Mais bon sans le contexte c'est peut-être une mauvaise interprétation de ma part


0
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 6 mai 2024 656
17 sept. 2023 à 16:39

Un petit complément dans le cas où ref_chauffeur est null, a vaut 1 donc finalement s = b

0
Rejoignez-nous