Multi requête sql (avec 2 and et 1 or) [Résolu/Fermé]

Signaler
-
 easyjava -
Bonjour,
Voici mon problème :

J'ai deux conditions à respecter qui sont les suivantes :

`left` >= '".$dateLeft."' AND `back` <= '".$dateBack."'

`left` <= '".$dateLeft."' AND `back` >= '".$dateBack."'

J'ai bien essayé de faire quelque chose dans ce genre :

$connect = "SELECT * FROM `locations` WHERE `left` >= '".$dateLeft."' AND `back` <= '".$dateBack."' OR `left` <= '".$dateLeft."' AND `back` >= '".$dateBack."'";

mais cela ne fonctionne pas car mysql n'arrive pas à comprendre les deux conditions. Idéalement il faudrait pouvoir faire comme en math et utiliser des parenthèses mais ça ne fonctionne pas non plus.

Est ce que quelqu'un sait comment formuler cette "multi requête" ?

Merci d'avance et bonne journée à vous.

3 réponses

Enfait j'ai trouvé moi-même.

Ce n'était pas une erreur de parenthèses mais de logique tout simplement.

Si jamais voici la requête correcte :

$connect = "SELECT * FROM `locations` WHERE
(`left` <= '".$dateLeft."' AND `back` >= '".$dateBack."') OR
(`left` <= '".$dateLeft."' AND `back` >= '".$dateLeft."') OR
(`left` <= '".$dateBack."' AND `back` >= '".$dateBack."') OR
(`left` >= '".$dateLeft."' AND `back` <= '".$dateBack."')
";
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
1542
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
8 avril 2016
146
Bonjour.
Et comme ceci:

$connect = "SELECT * FROM `locations` WHERE `left` >= '".$dateLeft."' OR `left` <= '".$dateLeft."' AND `back` <= '".$dateBack."' OR `back` >= '".$dateBack."'";

A moins que sémantiquement, cela ne colle pas. Sinon, avec un XOR

$connect = "SELECT * FROM `locations` WHERE `left` >= '".$dateLeft."' XOR `back` >= '".$dateBack."'";
Enfait je me suis mal exprimé, un exemple vaut mille mots.

J'ai dans ma base des enregistrements qui correspondent à des locations (avec une date de début et une date de fin).
Maintenant je code la page qui insère une nouvelle location. Je dois donc vérifier si les dates de la nouvelle location tombent en même temps que d'autres locations déjà enregistrées.
Il y a donc 4 conditions :
            Début de la loc existante            Fin de la loc existante
1          avant                                       après
2          avant                                       avant
3          après                                       après
4          après                                       avant

Dans ces 4 cas la nouvelle location est en même temps qu'une ancienne location et son id doit apparaitre.

J'ai donc essayé cette formule :
SELECT * FROM `locations` WHERE
(`left` <= '".$dateLeft."' AND `back` >= '".$dateBack."') OR
(`left` <= '".$dateLeft."' AND `back` <= '".$dateBack."') OR
(`left` >= '".$dateLeft."' AND `back` >= '".$dateBack."') OR
(`left` >= '".$dateLeft."' AND `back` <= '".$dateBack."')

Malheureusement elle me sort des id qui ne sont pas en même temps que la nouvelle location donc les parenthèses sont mal placées ou ne fonctionnent pas.