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

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