Interval entre deux date ou timestamp

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Interval entre deux date ou timestamp

par Ajoloca » 05 déc. 2006, 08:25

Bonjour,

Je te conseillerais de bien séparer les variables PHP du reste de la requête
Exp.
$requete = 'SELECT idrdv FROM rdv WHERE
(((' . $debut . ' between debut AND fin) AND (' . $fin . ' between debut AND fin)) ||
((' . $debut. ' between debut AND fin) AND (' . $fin . ' not between debut AND fin)) ||
((' . $debut. ' not between debut AND fin) AND (' . $fin . ' between debut AND fin))) AND
((' . $debut. ' != fin) && ' . $fin . ' != debut)';

par Moker » 05 déc. 2006, 03:41

voici la requete que j'ai pu construire grace à vous :

Code : Tout sélectionner

SELECT idrdv FROM rdv WHERE ((($debut between debut AND fin) AND ($fin between debut AND fin)) || (($debut between debut AND fin) AND ($fin not between debut AND fin)) || (($debut not between debut AND fin) AND ($fin between debut AND fin))) AND (($debut != fin) && $fin != debut)
elle permet de tester les cas suivant :

Code : Tout sélectionner

enregistré |---------| a enregistrer |---------| enregistré |---------| a enregistrer |---------| enregistré |--------| a enregistrer |-------------| enregistré |-------------| a enregistrer |--------| enregistré |---------| a enregistrer |--------| enregistré |---------| a enregistrer |--------|
vous avez reponse à tout, merci encore !

par Ajoloca » 05 déc. 2006, 02:30

Bein...
Avec mes 58Kg et mon 1m70, je crois que j'ai pas le choix!

par Truc » 05 déc. 2006, 02:26

j'essairait de faire plus vite la prochaine fois :lol:
Y a interet :twisted:
Je plaisante... j'ai tiré trop vite :oops:
L'union fait la force !
Le bon, la brute et le méchant...

Moi je suis le méchant, départager vous :lol:

par Ajoloca » 05 déc. 2006, 01:19

Ajoloca, je rêve ou sur chacun des posts où on se croise on se complète ? :)
L'union fait la force !

par DocType » 05 déc. 2006, 01:16

Ajoloca, je rêve ou sur chacun des posts où on se croise on se complète ? :)

par Ajoloca » 05 déc. 2006, 01:02

Re,
n'oublie pas que tu peux ajouter des conditions
Exp:

Code : Tout sélectionner

mysql> select ('b' between 'a' and 'c') and (1 between 2 and 3) as ok; +----+ | ok | +----+ | 0 | +----+ 1 row in set (0.00 sec)
Si tu obtiens 1 les deux son vraies, si c'est 0 au mois une est fausse.

par Moker » 05 déc. 2006, 00:58

pardon truc, mais je n'ai pas eut le temps de mettre resolu je redigeait le deuxieme message :oops:

j'essairait de faire plus vite la prochaine fois :lol:

par Moker » 05 déc. 2006, 00:55

cette fonction aussi colle parfaitement avec le resultat desiré :D

merci à toi aussi Ajoloca :wink:

par Truc » 05 déc. 2006, 00:54

Modération :
Moker, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération en cliquant sur le bouton [Mettre Résolu] en haut à gauche de ce sujet.

par Moker » 05 déc. 2006, 00:47

Merci beaucoup LHDN92 ! :D

c'est exactement ce que je desirait faire et comme tout se passe dans la requete ca m'aide encore plus :wink:

merci encore pour ton aide ! bonne continuation :)

par Ajoloca » 05 déc. 2006, 00:37

Bonsoir,

Une autre façon de faire c'est d'utiliser 'BETWEEN'
• expression BETWEEN min AND max
Si expression est supérieure ou égale à min et expression est inférieure ou égale à max,
BETWEEN retourne 1, sinon 0. Ceci est équivalent à l'expression (min <= expression
AND expression <= max) si tous les arguments sont du même type. Dans tous les autres
cas, la conversion de type prends place, selon les règles suivantes, mais appliquée aux trois
arguments. Notez que avant la 4.0.5, les arguments étaient convertis au type de expr.
mysql> SELECT 1 BETWEEN 2 AND 3;
-> 0
mysql> SELECT 'b' BETWEEN 'a' AND 'c';
-> 1
mysql> SELECT 2 BETWEEN 2 AND '3';
-> 1
mysql> SELECT 2 BETWEEN 2 AND 'x-3';
-> 0
• expr NOT BETWEEN min AND max
Même chose que NOT (expr BETWEEN min AND max).

par DocType » 05 déc. 2006, 00:11

si je ne me trompe pas, pour quatres tests différents

Code : Tout sélectionner

enregistré |---------| a enregistrer |---------| enregistré |---------| a enregistrer |---------| enregistré |--------| a enregistrer |-------------| enregistré |-------------| a enregistrer |--------|
Pour ces quatres possibilités, les tests en sql seraient:

Code : Tout sélectionner

WHERE (date_deb>recorded_debut AND date_deb<recorded_fin) || (date_fin>recorded_debut AND date_fin<recorded_fin) || (date_deb<recorded_debut AND date_fin>recorded_fin)

date_deb = date de debut que tu souhaites enregistrer
date_fin = date de fin que tu souhaites enregistrer
recorded_deb = ton champ timestamp de debut dans la table
recorded_fin = ton champ timestamp de fin dans la table

par DocType » 04 déc. 2006, 23:57

héhé :D

merci à toi LHDN92, pour cela pas de soucis, je sait bien qu'il faut utiliser un if :wink:

malheureusement je ne voit pas comment tester si les dates soumisent font parties de l'interval debut/fin des enregistrement de la base :cry:
dans ta requête !
je suis en train de te trouver la requête qui convient, mais pour ma tite tête c'est assez complexe ^^

par Moker » 04 déc. 2006, 23:47

héhé :D

merci à toi LHDN92, pour cela pas de soucis, je sait bien qu'il faut utiliser un if :wink:

malheureusement je ne voit pas comment tester si les dates soumisent font parties de l'interval debut/fin des enregistrement de la base :cry: