Page 1 sur 2
probleme de date et le format SQL
Posté : 02 janv. 2007, 22:34
par fanette
Bonsoir
J'ai une requete SQL qui fonctionne mais cependant j'ai un provleme en effet dans mon SQL jai un champs date qui est sous la forme :
2007-01-12
hors j'ai ma requete
$result = mysql_query("SELECT * FROM agenda WHERE yeardebut = '$annee-$mois-$jour' AND region = '1' OR region = '2' OR region = '3' ORDER BY id DESC");
cependant ma varialble $annee-$mois-$jour' est egal a
2007-1-12 il manque donc le 0 à 01 ... avez vous une méthode pour remedier a ce probleme ?
Merci
Posté : 02 janv. 2007, 22:39
par Invité
Posté : 02 janv. 2007, 22:46
par fanette
J'ai fait
WHERE yeardebut = getdate('$c_annee-$c_mois-$jour')
mais sa ne change rien a mon probleme ...
Posté : 02 janv. 2007, 22:50
par Invité
il me manque toujours le 0
Posté : 02 janv. 2007, 22:53
par Ajoloca
Bonjour,
Avant d'utiliser tes variables PHP dans MySQL tu dois le convertir à un format compréhensible par MySQL.
Tes variables PHP peuvent être considérées comme des chaines.
Tu dois donc convertir tes chaines PHP en DATE MySQL.
La fonction MySQL qui te permet de faire ça c'est
STR_TO_DATE()
Dans ton cas ça donnerait QQ chose du style
$qry = "SELECT * FROM agenda WHERE yeardebut = STR_TO_DATE('". $annee."-".$mois."-".$jour."', '%Y-%m-%d') AND region = '1' OR region = '2' OR region = '3' ORDER BY id DESC";
if(!$result = mysql_query($qry)){
die('ERR_SQL :<br />' . $qry . '<br />' . mysql_error());
}
Posté : 02 janv. 2007, 22:56
par Invité
il me manque toujours le 0
essaies ca:
$
date = getdate();
$year = $date[year];
$mois = $date[mon];
$jour = $date[mday];
$FormatDate = "$jour-$mois-$year";
$select = "SELECT * FROM $table WHERE date='$FormatDate'";
Posté : 02 janv. 2007, 23:02
par Invité
bonsoir merci de ta réponse
jai donc mi ceci
Code : Tout sélectionner
yeardebut = STR_TO_DATE('". $annee."-".$mois."-".$jour."', '%Y-%m-%d')
J'ai afficher le resulatt de la requete mais sa ne maffiche pas le 0 manquant ... et donc pas de resultat.
Posté : 02 janv. 2007, 23:05
par Ajoloca
C'est normal que tu ne le vois pas comme ça,
Essaie ta requête, elle fonctionne à condition que ton champ dans la base soit de type DATE
Si par exemple il est de type DATETIME ou bien TIMESTAMP il te faudra ajouter l'heure.
Posté : 02 janv. 2007, 23:08
par Invité
Re bonsoir
jai fait la méthodes
$FormatDate = "$jour-$mois-$year";
je les affiché mais il me manque toujours mon
0
Posté : 02 janv. 2007, 23:10
par Invité
Ajolocla
Jai vérifier le Type dans SQL est bien "date"
Posté : 02 janv. 2007, 23:15
par Ajoloca
Re,
Dans la mhode que je t'ai donné, c'est pas PHP qui fera cette conversion mais MySQL donc tu ne peut pas le voir en affichant ta requête avant l'exécution.
Fais un copier coller du résultat. dans phpMyAdmin ou bien dans le client MySQL et exécute-la. Là tu comprendras.
Si tu tiens vraiment à le voir, ton 0, avant l'exécution utilise ceci
$mois = $mois < 10 ? $mois : '0' . $mois;
$jour = $jour < 10 ? $jour : '0' . $jour;
Mais je te rassure tout de suite. Ça ne changera rien, SI ça fera faire plus d'instructions et donc ça ralentira d'avantage ton appli.
Posté : 02 janv. 2007, 23:23
par Ajoloca
Re,
Si ça peut te rassurer regarde le code suivant
Code : Tout sélectionner
mysql> SELECT STR_TO_DATE('2007-1-1', '%Y-%m-%d');
+-------------------------------------+
| str_to_date('2007-1-1', '%Y-%m-%d') |
+-------------------------------------+
| 2007-01-01 |
+-------------------------------------+
1 row in set (0.06 sec)
mysql>
Posté : 02 janv. 2007, 23:47
par fanette
Merci pour t'es réponse
alors j'ai prit ta méthode cepandant sa ne fonctionne pas voici ma requete qui se creer
je lé afficher avecx un echo
Code : Tout sélectionner
SELECT * FROM agenda WHERE yeardebut = STR_TO_DATE('2007-1-12', '%Y-%m-%d') AND region = '6' ORDER BY id DESC
et voici la requete du code
Code : Tout sélectionner
$result = "SELECT * FROM agenda WHERE yeardebut = STR_TO_DATE('$annee-$mois-$jour', '%Y-%m-%d') AND region = '1' OR region = '2' OR region = '3' ORDER BY id DESC";
Posté : 02 janv. 2007, 23:52
par Ajoloca
Re,
Tu es sur que cette requête génère le code que tu montres ???
Avec ceci
AND region = '1' OR region = '2' OR region = '3'
J'ai beaucoup de mal à croire que ça génère ceci
AND region = '6'
Sinon, as tu fait ce que je t'ai demandé ???
Exécuter ta requête sous phpMyAdmin ou bien sous le client MySQL.
Posté : 03 janv. 2007, 00:01
par fanette
Re bonsoir
ALors en faite voici le code complet je lavai reduit afin qu'il soit + comphrehensible
if($_GET['region'] == 'fr') {
$result = "SELECT * FROM agenda WHERE yeardebut = STR_TO_DATE('$c_annee-$c_mois-$jour', '%Y-%m-%d') AND region = '1' AND region = '2' AND region = '3' AND region = '4' AND region = '5' AND region = '6' AND region = '7' AND region = '8' AND region = '9' AND region = '10' AND region = '11' AND region = '12' AND region = '13' AND region = '14' AND region = '15' AND region = '16' AND region = '17' AND region = '18' AND region = '19' AND region = '20' AND region = '21' AND region = '22' ORDER BY id DESC";
$result2 = mysql_query($result);
}
[php]SELECT * FROM agenda WHERE yeardebut = STR_TO_DATE('2007-1-12', '%Y-%m-%d') AND region = '1' AND region = '2' AND region = '3' AND region = '4' AND region = '5' AND region = '6' AND region = '7' AND region = '8' AND region = '9' AND region = '10' AND region = '11' AND region = '12' AND region = '13' AND region = '14' AND region = '15' AND region = '16' AND region = '17' AND region = '18' AND region = '19' AND region = '20' AND region = '21' AND region = '22' ORDER BY id DESC
if($_GET['region'] <> 'fr') {
$result = "SELECT * FROM agenda WHERE yeardebut = STR_TO_DATE('$c_annee-$c_mois-$jour', '%Y-%m-%d') AND region = '$_GET[region]' ORDER BY id DESC";
$result2 = mysql_query($result);
}[/php]
SELECT * FROM agenda WHERE yeardebut = STR_TO_DATE('2007-1-12', '%Y-%m-%d') AND region = '4' ORDER BY id DESC
donc voici tous le code ... avec les resulat afficher avec un echo