Requete complexe avec des dates

Eléphant du PHP | 291 Messages

03 mai 2006, 21:50

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 :
  • 2006-03-01
  • 2006-05-12
  • 2006-05-14
  • 2005-12-07
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
Modifié en dernier par bunk le 03 mai 2006, 23:52, modifié 1 fois.

Eléphant du PHP | 112 Messages

03 mai 2006, 22:05

Bonjour :D

Est ce que tes enregistrements sont dans une table ? Dans quoi sont-ils stockés?

Eléphant du PHP | 291 Messages

03 mai 2006, 22:09

oui pardon c'est dans un table, au format DATE

Eléphant du PHP | 112 Messages

03 mai 2006, 22:14

alors, je pense qu'un simple order by DATE DESC limit 0,1 ca doit marcher :D

Eléphant du PHP | 291 Messages

03 mai 2006, 22:17

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

Eléphant du PHP | 112 Messages

03 mai 2006, 22:19

La dernière entrée?

Eléphant du PHP | 291 Messages

03 mai 2006, 22:22

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

Eléphant du PHP | 112 Messages

03 mai 2006, 22:27

Je ne comprend pas ce qui cloche parce que la 3 est plus proche que la 2 :/

Eléphant du PHP | 291 Messages

03 mai 2006, 22:34

par rapport a aujourd'hui, l'evennement le plus proche c'est date2

Eléphant du PHP | 112 Messages

03 mai 2006, 22:41

Haaaaaaaaaa...aaaa...aaa. Les dates peuvent être future en fait? Je vais voir ce que je peux faire alors ;D

Eléphant du PHP | 291 Messages

03 mai 2006, 22:59

Voila !

Merci c'est sympa

Eléphant du PHP | 112 Messages

03 mai 2006, 23:14

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;

Eléphant du PHP | 112 Messages

03 mai 2006, 23:18

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

Eléphant du PHP | 291 Messages

03 mai 2006, 23:24

OK merci !

je vais comprendre et tester

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

03 mai 2006, 23:25

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
:-k

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