Multi requête sql (avec 2 and et 1 or)
Résolu
easyjava
-
easyjava -
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.
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.
A voir également:
- Multi requête sql (avec 2 and et 1 or)
- Or - Guide
- Supercopier 2 - Télécharger - Gestion de fichiers
- Spybot search and destroy - Télécharger - Antivirus & Antimalwares
- Word numéro de page 1/2 - Guide
- Whatsapp avec 2 sim - Guide
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."')
";
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."')
";
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."'";
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 :
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.
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.