Page 1 sur 1

Sélectionner au mieux en fonction d'une date

Posté : 29 avr. 2005, 17:15
par Daimonji
Bonjour,

Je veux afficher des infos datées et que ces infos soient séparées entre :
1) une partie affichant les infos à venir (donc après la date actuelle);
2) une partie affichant les infos passées

J'ai une table contenant les champs message et date. Je fais la requête suivante, j'obtiens le (1) :
SELECT message, DATE_FORMAT(date, '%d/%m/%Y') as dt FROM infos WHERE date > CURDATE() ORDER BY date DESC

En remplaçant > par <=, j'obtiens le (2).

Je voudrais faire la même chose avec une requête comme celle-ci :
SELECT message, DATE_FORMAT(date, '%d/%m/%Y') as dt FROM infos ORDER BY date DESC
et en faisant la séparation dès que la date actuelle dépasse la date. En clair, je voudrais passer de deux à une seule requête, est-ce possible ?

Posté : 29 avr. 2005, 17:24
par Cyrano
En supprimant la clause WHERE, tu auras toutes les dates dans l'ordre chronologique: il te suffira de paramétrer une variable et de tester chaque ligne en fonction de cette valeur: si c'est antérieur, tu affiches sans transition, sinon, tu mets ton séparateur et tu continues.

Pour éviter d'avoir un séparateur juste avant tous les évènements ultérieurs à la date repère, dans ta boucle d'affichage, utilises un témoin, une variable que tu initialises avant la boucle à 0 par exemple et si la séparation doit être affichée, tu ré-initialise ton témoin à 1 avant le tour de boucle suivant. Donc à l'intérieur de la boucle, juste avant d'afficher le séparateur, tu teste le témoin et le tour est joué.

Enfin j'espère que ça répond à ta question...?

Posté : 29 avr. 2005, 17:41
par Daimonji
C'est bon ça marche, j'ai fait comme ça :

$fait = 0;
while ($ligne = mysql_fetch_array($requete)) {
if ((!$fait) and (date("Y-m-d", time()) > $ligne["date"]))
{
echo 'séparation';
$fait = 1;
}
aff_table($ligne["message"], $ligne["dt"]);
echo '<br>';
}

Merci Cyrano :D