Sql between imcomprehensible

Profil bloqué -  
 fiu -
Bonjour,
je m'occupe de mes contrat
et je voudrais avoir les contrat qui ce termine dans 1 mois et un jour donc je fais :

<?php

$d = date("d");
$m = date("m");
$df = $d + 2 ;
$mf = $m + 1 ;
$a = '0' ;

// on se connecte à MySQL
$db = mysql_connect('localhost', 'toto', 'toto');

// on sélectionne la base
mysql_select_db('base',$db);

// on crée la requête SQL
$sql = "
SELECT *
FROM contrat
WHERE datef BETWEEN '$df-$a$mf-2000' AND '31-$a$mf-2010'
;";
echo $sql ;
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

// on fait une boucle qui va faire un tour pour chaque enregistrement
while($data = mysql_fetch_assoc($req))
{
// on affiche les informations de l'enregistrement en cours
echo '<table border="0" >';
echo '<TR><TD><IMG SRC="fin.jpg" WIDTH=100 HEIGHT=100 /></TD>
<TD bgcolor="#795344">Rappel</TD><TD><a href="recap_cp2.php?idh='.$data['numcontrat'].'" target="droit_bas"><i>'.$data['date'].'-'.$data['contrat'].'-'.$data['datef'].'</i></a><br></TD><TD><a href="recap_cp4.php?idh='.$data['contrat'].'" target="droit_bas"><i>Terminer le Rappel</i></a><br></TD></TR></table>';
}



?>

le problème est que j'ai bien un contrat qui ce termine le 29-07-2006 est il ne m'affiche rien, pourquoi ?

pouvez vous m'aidez ?

pour verifier ,j'ai fais affiche la requette sql est il m'affiche bien : SELECT * FROM contrat WHERE datef BETWEEN '4-07-2000' AND '31-07-2010' ;
A voir également:

3 réponses

fiu
 
Salut,

mon server MySQL m'affiche les dates sous la forme yyyy-mm-dd. Je ne peux donc pas tester si le cas que tu donnes en exemple est provoqué par l'absence d'un 0 initial 'oublié' dans 4-07-2000.

Mais, es-tu sûr que les dates manipulées par MySQL peuvent l'être sous la forme dd-mm-yyyy ?
0
Profil bloqué
 
d'accord,
oui quand je fais afficher le mois il m'affiche juste '7' ! c'est pour sa que je rentre une variable $a qui est égal a 0 puis je fais '$df-$a$mf-2000' !
dans d'autre script Php il marche avec ce type de date manipulé donc j'avoue que la !
0
fiu
 
Pardon, je me suis mal exprimé : comment es-tu sûr que tu aies le droit d'exprimer les dates sous la forme dd-mm-yyyy dans MySQL ?

Chez moi, select * from now(); m'affiche une date yyyy-mm-dd. C'est le signe que le MySQL que j'utilise manipule les dates au format yyyy-mm-dd. Sachant ça, si je veux faire comparer une colonne date à une constante, il me faudra exprimer la constante au format attendu par MySQL. Si je la présente autrement, MySQL en déduira certainement que je ne lui présente pas une expression date et irait (peut-être) considérer que c'est une chaine...
1. ... where datedebut > '2010-01-01' -- comparaison date - date
2. ... where datedebut > '01-01-2010' -- comparaison date - chaine
0