Page 1 sur 2

DATE et mysql

Posté : 20 oct. 2005, 11:47
par milooser
Bonjour,
j'ai un soucis avec la sélection d'une table selon la date d'un champ.
Cette date est un timestamp, et je voudrais sélectionner les champs correspondant à un mois précis. Je sais comment on fait en PHP mais en mysql nada.

Merci d'avance.

Posté : 20 oct. 2005, 11:56
par zeus
Utilise DATE_FORMAT

Code : Tout sélectionner

SELECT DATE_FORMAT(champ, '%m') FROM table

Posté : 20 oct. 2005, 22:38
par milooser
Bonsoir,
merci pour la réponse mais en faite c'est pas vraiment ce que je veux faire.

En fait j'ai une variable $mois qui contient le numéro d'un mois, et dans la requête je voudrais seulement extraire les champs où le mois corresponde à la variable. Le problème c'est que le champ date contient des timestamp.

Je pense que ça devrait ressembler à un truc du genre :

Code : Tout sélectionner

mysql_query("SELECT * FROM $table[texte] WHERE DATE_FORMAT(date,%c)='$mois'") or die(mysql_error());
mais celà ne donne rien ... :cry:

Posté : 20 oct. 2005, 23:46
par K20
Est-ce que ça fonctionne si notre champs MySQL est de type int ? Car je veux faire la même chose :D

Si ça fonctionne pas, comment faire pour moi ? (la date est stocké sous forme de timestamp dans un champ int (11) )

Posté : 21 oct. 2005, 09:46
par zeus
A l'un comme à l'autre

le requete de milooser devrait fonctionner à condition que $mois contienne le même type de données que le format demandé

@milooser : il faut que tu t'assure que $mois contient le nombre du mois entre 01 et 12

@K20 : pas besoin de formater ton mois, mais quand tu vas faire la requete SQL, il faut t'assurer que tu compare ton champs avec un entier

Posté : 21 oct. 2005, 13:48
par K20 (non logue)
Heu, desole mais je n'ai absolument pas compris :(
Je peux utiliser DATE_FORMAT sur un champ entier ??

Posté : 21 oct. 2005, 13:55
par zeus
excuse moi K20, j'avais mal lu ton post

Donc, si tu mémorise le timestamp, c'est comme pour milooser, il faut utiliser DATE_FORMAT. consulte la table des formats pour ne retourner que le mois

Posté : 21 oct. 2005, 14:56
par milooser
Bonjour,
merci encore pour tes réponses mais ça ne me renvoie toujours rien cette requête :
Voici mon code, avec toujours $mois un nombre 1,...,12, le paramètre %c recherche donc bien un chiffre de la même forme 1,...,12.


Code : Tout sélectionner

$q_archive=mysql_query("SELECT date FROM $table[texte]"); while($l_archive=mysql_fetch_assoc($q_archive)) { if($mois!==date('n',$l_archive['date'])) { $mois=date('n',$l_archive['date']); $q_titre=mysql_query("SELECT * FROM $table[texte] WHERE DATE_FORMAT(date,'%c')='$mois'"); while($l_titre=mysql_fetch_array($q_titre)) { echo '<p>'.$l_titre['titre'].'</p>'; } } else echo ""; }
Et ça ne renvoie toujours rien, je vois pas ce que c'est :/

Merci encore d'avance.

Posté : 21 oct. 2005, 15:00
par zeus
Fait afficher la requete genèrée et execute là directement dans PhpMyAdmin pour voir si elle donnes qqchose ou pas

Posté : 21 oct. 2005, 16:41
par milooser
Pas mal comme moyen de test je ne connaissais pas. Côté résultat, oui ça ne retourne rien du tout, nada.

Posté : 21 oct. 2005, 16:50
par zeus
Est-ce que tu peut m'afficher cette requete stp ?

Posté : 21 oct. 2005, 17:21
par Invité
Le champ 'date' :
date INT(10) avec que des enregistrements en timestamp

La requête pour le mois de juillet :
SELECT * FROM `alberticle_texte` WHERE DATE_FORMAT(date,'%c')='7'

Résultat :
Votre requête SQL a été exécutée avec succès (traitement: 0.0004 sec.)

requête SQL:
SELECT *
FROM `alberticle_texte`
WHERE DATE_FORMAT( date, '%c' ) = '7'
LIMIT 0 , 30

Encore merci merci

Posté : 21 oct. 2005, 17:33
par zeus
Question bête : est-ce que tu as des enregistrements qui correspondent à cette sélection ?

Posté : 21 oct. 2005, 21:36
par milooser
Bonjour,
oui j'en ai puisque quand je fais date('n',$req['date']) j'ai bien la valeur du mois, même pour l'exemple avec le mois de juillet. Je comprends pas du tout.

Posté : 21 oct. 2005, 22:01
par Truc
Salut DATE_FORMAT attends en 1er paramètre un type DATE ou DATETIME. Puisque tu as un timestamp il faut le convertir en date explotable avant, essaie comme ça:

Code : Tout sélectionner

SELECT * FROM $table[texte] WHERE DATE_FORMAT(FROM_UNIXTIME(date),'%c')=$mois"