Page 1 sur 2
Requete complexe avec des dates
Posté : 03 mai 2006, 21:50
par bunk
Bonsoir,
pouvez vous m'aider à résoudre une requete pour sortir un evenement en fonction d'une date au format 0000-00-00
j'ai 4 enregistrement avec les dates suivante :
je voudrais obtenir l'enregistrement qui à la date la plus proche de $date=date('Y-m-d'); donc dans l'exemple je souhaite avoir la date : 2006-05-12
D'avance merci
Posté : 03 mai 2006, 22:05
par Mouet
Bonjour
Est ce que tes enregistrements sont dans une table ? Dans quoi sont-ils stockés?
Posté : 03 mai 2006, 22:09
par bunk
oui pardon c'est dans un table, au format DATE
Posté : 03 mai 2006, 22:14
par Mouet
alors, je pense qu'un simple order by DATE DESC limit 0,1 ca doit marcher

Posté : 03 mai 2006, 22:17
par bunk
non j'ai déjà tenté comme ca il me sort toujours la dernière mais si y'a des dates entre et donc plus proche ca me les donnes pas
Posté : 03 mai 2006, 22:19
par Mouet
La dernière entrée?
Posté : 03 mai 2006, 22:22
par bunk
oui ca me sort la dernière entrée, par rapport a l'exemple :
date1 = 2006-03-01
date2 = 2006-05-12
date3 = 2006-05-14
date4 = 2005-12-07
ca me sort : date3 alors que je voudrais qu'il me sorte date2
Posté : 03 mai 2006, 22:27
par Mouet
Je ne comprend pas ce qui cloche parce que la 3 est plus proche que la 2 :/
Posté : 03 mai 2006, 22:34
par bunk
par rapport a aujourd'hui, l'evennement le plus proche c'est date2
Posté : 03 mai 2006, 22:41
par Mouet
Haaaaaaaaaa...aaaa...aaa. Les dates peuvent être future en fait? Je vais voir ce que je peux faire alors ;D
Posté : 03 mai 2006, 22:59
par bunk
Voila !
Merci c'est sympa
Posté : 03 mai 2006, 23:14
par Mouet
Alors j'ai peu être une solution (un peu bourin, il est vrai) mais qui devrait marcher.
// On va dire que $da est la date au format 0000-00-00 comme dans tes tables.
$nowdat = date('Ymd');
$ta = preg_replace('-', '', $da);
$ecar1 = $ta - $nowda;
$ecar1 = preg_replace('-', '', $ecar1);
if ($ecar1 <= $ecar) { $bonneid = $x[id]; }
$ecar = $ecar1;
Posté : 03 mai 2006, 23:18
par Mouet
date1 = 2006-03-01
date2 = 2006-05-12
date3 = 2006-05-14
date4 = 2005-12-07
Pour 2006-05-03
date1 = 202 (l'écart)
date2 = 9 (l'écart)
date3 = 11 (l'écart)
date4 = 9296 (l'écart)
Donc c'est bien la date 2

Posté : 03 mai 2006, 23:24
par bunk
OK merci !
je vais comprendre et tester
Posté : 03 mai 2006, 23:25
par Truc
Et avec une requête comportant un tri comme dis ET une condition sur la date:
SELECT * FROM table WHERE champ_date >= NOW() ORDER BY champ_date LIMIT 1
