2009-04-13 7 views
3

Je travaille actuellement sur la construction d'un site web de baseball. D'un côté de la page, je veux afficher des informations sur le prochain jeu à venir. J'utilise mysql ver. 5.0.45. Ma table est construite comme si:Comment obtenez-vous la prochaine date à venir d'une table?

opposingTeam, la date, l'heure, le score

  • date est dans le format de date de MySQL (aaaa-mm-jj)
  • J'ai trouvé le datediff (date1, date2) commande et a essayé d'expérimenter avec cela sans chance

J'ai essayé des requêtes telles que:

SELECT * 
FROM schedule 
WHERE MIN(DATEDIFF(CURDATE(),date)) 
  • Mais cela me donne un ARROR parce que je suis en utilisant le joli mal
  • Je suis fonction MIN() encore nouveau à MySQL et je juste ne peux pas comprendre cela

Répondre

12

Si vous souhaitez afficher le prochain match (y compris aujourd'hui), vous pouvez utiliser les éléments suivants:

SELECT * FROM `schedule` WHERE `date` >= CURDATE() ORDER BY `date` LIMIT 1; 

Si vous souhaitez afficher tous les jeux à venir utiliser:

SELECT * FROM `schedule` WHERE `date` >= CURDATE() ORDER BY `date`; 
+0

il ne s'affiche pas sage mensuel et annuel, cela signifie 2015 imprime la dernière rangée et 2016 imprime la première rangée même mois aussi. – 151291

0

Je pense que ce serait quelque chose comme ceci:

SELECT * FROM `schedule` WHERE `date` > NOW() ORDER BY `date` LIMIT 1 

la LIMIT 1 limite la requête de retourner une ligne, mais si vous avez besoin de plus d'un, vous pouvez régler le nombre en conséquence (ou omettre entièrement LIMIT 1, pour extraire des données pour tous les futurs jeux)

+0

il ne montre pas mensuel et annuel sage, cela signifie que 2015 imprime la dernière ligne et 2016 imprime la première rangée même le mois aussi. – 151291

0

Peut-être:

select top 1 * from schedule where date>=CURDATE() order by date 
+1

Je pense que 'top' est SQL Server seulement - pas MySQL. – nilamo

0

Quelques choses à considérer.

Vous vous exposez probablement à un tourment éternel si vous nommez une colonne "date".

L'optimiseur de requête est notoirement inepte pour optimiser les requêtes qui comparent des expressions et/ou des fonctions avec des valeurs - essayez d'utiliser uniquement des noms de colonnes.

Par conséquent, vous devez comparer la valeur de la colonne de date avec, disons, CURDATE(). (Il est correct de comparer une valeur de colonne avec une expression ou une fonction.)

+0

Merci pour le conseil. Je vais changer le nom et garder cela à l'esprit pour l'avenir. –

0

essayer SELECT max(day) FROM schedule

Cela donne la meilleure date à partir de la table.

Pour obtenir le lendemain, utilisez:

SELECT 
DATE_ADD(max(day),INTERVAL 1 DAY) 
FROM schedule 

(j'ai utilisé « jour » pour votre champ « date »)

Questions connexes