SELECT de la date la plus proche du jour actuel

SELECT de la date la plus proche du jour actuel - PHP - Programmation

Marsh Posté le 18-05-2006 à 20:47:13    

Bonjour,
J'ai une table avec différentes données dont plusieurs dates.
 
Dans un SELECT, j'aimerais aller rechercher la date future la plus proche du jour actuel, ainsi que la date passée la plus proche.
 
Est ce possible ? Merci d'avance

Reply

Marsh Posté le 18-05-2006 à 20:47:13   

Reply

Marsh Posté le 18-05-2006 à 20:53:07    

oli1987 a écrit :


Dans un SELECT, j'aimerais aller rechercher la date future la plus proche du jour actuel


 
La date de demain, quoi ? [:figti]  
 
SELECT DATE_ADD(CURDATE() , INTERVAL 1 DAY);
 

Citation :

ainsi que la date passée la plus proche.


 
SELECT DATE_ADD(CURDATE() , INTERVAL -1 DAY);


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 18-05-2006 à 20:55:13    

non pas de demain ...
En fait, ma table reprend des dates de différents matches qui ont lieu a une semaine voire deux semaines d'intervalle .... ca dépend ... 7 jours ou 8 jours voire 6 parfois ... ca dépend

Reply

Marsh Posté le 18-05-2006 à 21:00:14    

T'as juste à remplacer CURDATE() par la date en question, donc.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 18-05-2006 à 21:03:25    

oui mais je voudrais que ca se fasse automatiquement .. pas moyen ???

Reply

Marsh Posté le 18-05-2006 à 21:07:43    

SELECT DATE_ADD(date, INTERVAL 1 DAY) [FROM ...] prend la date du lendemain de 'date', que veux-tu de plus automatique ? [:figti]  
 
(D'ailleurs, il me semble qu'on peut écrire ça comme ça : SELECT date + INTERVAL 1 DAY)


Message édité par sielfried le 18-05-2006 à 21:13:35

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 18-05-2006 à 21:14:24    

merci

Reply

Marsh Posté le 18-05-2006 à 21:15:16    

en fait, on est le 18-05-2006 ...
Si un match a lieu le 23-05-2006 et celui après le 30-05-2006, ce code là ne fonctionnera pas ...

Reply

Marsh Posté le 18-05-2006 à 21:32:48    

Ok ok désolé j'avais pas compris... j'avais dû lire à moitié ton dernier message. :sweat:  
 
Essaie qqchose du style :
select min(date) from matches where date > [date_en_question]
 
Eventuellement remplacer [date_en_question] par une sous-requête qui va la chercher, si tu ne l'as pas avant.


Message édité par sielfried le 18-05-2006 à 21:33:06

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 18-05-2006 à 21:35:55    

merci, je vais essayer

Reply

Marsh Posté le 18-05-2006 à 21:35:55   

Reply

Marsh Posté le 18-05-2006 à 22:23:21    

En fait, c'est plus une question de français que de SQL :D  
Ce qu'il faut voir, c'est que la date future la plus proche, c'est tout simplement la première des dates supérieures, triées par ordre croissant :)  
SELECT *
FROM la_table
ORDER BY la_date ASC
LIMIT 1
 
Bon, si tu veux juste la date future la plus proche et pas la ligne complète qui la contient, la solution du :
SELECT MIN(la_date) FROM la_table WHERE la_date > date_reference
est surement plus efficace [:figti]

Reply

Marsh Posté le 18-05-2006 à 23:19:09    

Pouvez vous me dire pourquoi la date passée s'affiche au lieu de la future ???
 

Code :
  1. <?php
  2. $date = date('%Y-%m-%d');
  3. mysql_connect("localhost", "***", "***" ) or die("Impossible de se connecter :  " . mysql_error());
  4. mysql_select_db("***" );
  5. $res = mysql_query("SELECT DATE_FORMAT(dategame,'%Y-%m-%d') AS dategame, game, score FROM games WHERE dategame > '$date' AND cat = '1' ORDER BY dategame ASC LIMIT 1" );
  6. while ($row1 = mysql_fetch_array($res, MYSQL_NUM))
  7. {
  8. ?>   
  9.                   <tr>
  10.                     <td width="100%" height="15">
  11.                     <font face="Verdana" style="font-size: 8pt" color="#FFFFFF">
  12.                     &nbsp;<?php echo $row1[1]; ?></font></td>
  13.                   </tr>
  14.     
  15. <?php
  16. }
  17. mysql_free_result($res);
  18. ?>

Reply

Marsh Posté le 18-05-2006 à 23:30:54    

Bien sur, le champ "dategame" à bien le type "DATE" dans la table :??:

Reply

Marsh Posté le 18-05-2006 à 23:33:32    

oui, et toujours la meme chose

Reply

Marsh Posté le 18-05-2006 à 23:34:17    

mon DATE_FORMAT ne sert à rien, mais ça ne change rien au final ...

Reply

Marsh Posté le 18-05-2006 à 23:41:04    

Essaie avec la requête :
SELECT dategame, '$date' FROM games WHERE dategame > '$date' AND cat = 1 ORDER BY dategame ASC LIMIT 1
 
et pour l'affichage :
<?php echo 'dategame:' . $row1[0] . ',date_ini:' . $row[1]; ?>
 
Parce que bon, s'il te sort un "dategame" antérieur à $date alors qu'il y a "dategame > '$date'" dans le WHERE ... :pt1cable:

Reply

Marsh Posté le 18-05-2006 à 23:48:03    

et le match ? je le met où ???

Reply

Marsh Posté le 18-05-2006 à 23:48:37    

sinon, ca donne le meme result ... je capte pas

Reply

Marsh Posté le 18-05-2006 à 23:49:54    

comme date, il m'affiche 2006-05-07 et non 2006-05-20 ...
 
 
Et la requête a pas l'air fausse pourtant

Reply

Marsh Posté le 19-05-2006 à 11:51:18    

La requête que je t'ai demandé d'exécuter, elle renvoie 2 dates :o

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed