DATE et mysql

Eléphant du PHP | 64 Messages

20 oct. 2005, 11:47

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.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

20 oct. 2005, 11:56

Utilise DATE_FORMAT

Code : Tout sélectionner

SELECT DATE_FORMAT(champ, '%m') FROM table
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 64 Messages

20 oct. 2005, 22:38

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:

K20
Eléphant du PHP | 303 Messages

20 oct. 2005, 23:46

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) )

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

21 oct. 2005, 09:46

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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

K20 (non logue)
Invité n'ayant pas de compte PHPfrance

21 oct. 2005, 13:48

Heu, desole mais je n'ai absolument pas compris :(
Je peux utiliser DATE_FORMAT sur un champ entier ??

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

21 oct. 2005, 13:55

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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 64 Messages

21 oct. 2005, 14:56

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.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

21 oct. 2005, 15:00

Fait afficher la requete genèrée et execute là directement dans PhpMyAdmin pour voir si elle donnes qqchose ou pas
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 64 Messages

21 oct. 2005, 16:41

Pas mal comme moyen de test je ne connaissais pas. Côté résultat, oui ça ne retourne rien du tout, nada.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

21 oct. 2005, 16:50

Est-ce que tu peut m'afficher cette requete stp ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

21 oct. 2005, 17:21

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

21 oct. 2005, 17:33

Question bête : est-ce que tu as des enregistrements qui correspondent à cette sélection ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 64 Messages

21 oct. 2005, 21:36

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.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

21 oct. 2005, 22:01

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"

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute