Multi requête sql (avec 2 and et 1 or)
Résolu/Fermé
A voir également:
- Multi requête sql (avec 2 and et 1 or)
- Word numéro de page 1/2 - Guide
- Fast and furious torrent magnet ✓ - Forum Téléchargement
- Whatsapp avec 2 cartes sim - Guide
- Reboot and select proper boot device or insert boot media in selected boot device and press a key ✓ - Forum Windows 10
- Multi exp pokemon diamant ✓ - Forum Jeux vidéo
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."')
";
freto
Messages postés
1542
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
8 avril 2016
162
26 mars 2009 à 11:37
26 mars 2009 à 11:37
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.