Pb SQL date

Eléphant du PHP | 223 Messages

14 juin 2008, 08:55

Bonjour,
j'ai un petit blem.
je voudrais classée les donne sql par date

pour classer par par ordre croissant ou decroissant pas de blem
mais je n'arrive pas a les classe de la plus prés de la date du jour à la plus lointaine


$db = mysql_connect($serveur, $user, $passw); 
mysql_select_db($base, $db);
$sql = "SELECT * FROM USER ORDER BY CREATION_TIME ";
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.''.mysql_error()); 
comment faire pour que creation_time soit classe de la date du jour à la plus lointaine
merci

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

14 juin 2008, 09:30

Rien de plus simple mon cher hashut, tu fais un classement par ordre décroissant sur le champ CREATION_TIME. Mais à condition que ce champ soit de type DATETIME dans la base de données pour que le classement soit juste.

Requête :

Code : Tout sélectionner

SELECT * FROM USER ORDER BY CREATION_TIME desc;
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 223 Messages

14 juin 2008, 10:00

Non je veut pas le classe en decroissant ni croissant je veut le classe
de la date la plus pres de celle du jour à la plus lointaine
c'est a dire par exemple on ai au mois de juin donc de
juin à mai

en juillet
de juillet a juin ext .....

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 juin 2008, 10:09

De la date la plus récente (qu'elle soit du jour ou dans 10 ans) à celle la plus ancienne (qu'elle soit du mois dernier où d'il y a 8 siècles), ca veut dire de la plus grande à la plus petite, et ca s'appelle bien un classement descendant.

Si ensuite tu veux limiter pour n'avoir que les dates inférieure à aujourd'hui, tu rajoutes une condition dans la clause WHERE de ta requête pour filtrer les enregistrements trouvés et ne retourner que ceux qui sont inférieur à la date du jour.

Idem si tu veux te limiter au dernier mois, tu rajoutes une autre condition.

Si cela peut t'aider, pour manipuler des champs de type date, tu peux utiliser les fonctions NOW(), MONTH(), YEAR() etc.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

14 juin 2008, 10:14

Mais c'est ça l'ordre décroissant des dates que tu décris.

Quand on est en juin ça classe de juin à mai ect ...
Et si on est en juillet ça de juillet à juin ext ...

Si tu ne veux pas les "éventuelles dates" futures (ce qui serait une erreur de saisie) tu ajoute la condition : WHERE CREATION_TIME <= Now()
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 422 Messages

14 juin 2008, 12:25

Pour avoir la différence de jour entre la date de création et aujourd'hui

Code : Tout sélectionner

DATEDIFF (CREATION_TIME, CURRENT_DATE)
qui te donne donc des nombres de jours négatifs pour les dates passées et des nombres positifs pour les dates à venir.
et donc ensuite

Code : Tout sélectionner

ABS(DATEDIFF (CREATION_TIME, CURRENT_DATE))
qui te donne la "distance" en jours entre la date de création et aujourd'hui, que cette date soit passée ou à venir

http://dev.mysql.com/doc/refman/5.0/fr/ ... tions.html

Eléphant du PHP | 223 Messages

14 juin 2008, 16:22

Merci c'est OK
$date_jour=date("2007-m-d H:i:s");
$sql = "SELECT * FROM USER WHERE CREATION_TIME >= '$date_jour' order by CREATION_TIME ASC";

merci ALL