2012-04-27 4 views
0

Il y aura des jeux le samedi, mais pas tous les week-ends. Je veux montrer une nouvelle semaine s'il y a un jeu à venir après samedi.Prochain jeu prochain, afficher le lundi

Je pensais à quelque chose comme ça pour vérifier 6 jours à l'avance si nous sommes sur lundi, s'il y a un jeu ce samedi il devrait le trouver. Mais bien sûr, il manque des pièces, juste un début mais je suis coincé. Pour l'instant, il trouve le prochain jeu qui est à 1 mois, il devrait seulement montrer s'il y en a un cette semaine.

"Select * From games Where date > DATE_ADD(CURDATE(),INTERVAL 6 DAY)" 

Répondre

0

Vous pouvez utiliser la classe de PHP DateTime pour trouver la date de samedi prochain:

$nextSaturday = new DateTime('next Saturday'); 

À partir de là, sélectionnez à l'endroit où la date est égale à $nextSaturday->format('Y-m-d') pour trouver les jeux (le cas échéant) pour samedi prochain.

+0

Si son possible, je veux utiliser quelque chose comme temps unix peut-être, est-ce possible? Peut-être avec strtotime() ou mktime() et chercher dans un certain intervalle. – user1225840

+0

@ user1225840: Ce n'est pas un problème du tout. Vous utiliseriez simplement [la méthode 'getTimestamp()'] (http://us3.php.net/manual/fr/datetime.gettimestamp.php), par exemple. '$ nextSaturday-> getTimestamp()'. – FtDRbwLXw6

+0

Merci pour ça! – user1225840

0

Ce que vous voulez demander à la base de données est chercher "tous les jeux dans les 6 prochains jours" vraiment

SELECT * FROM `games` WHERE `date` >= CURDATE() 
AND `date` <= DATE_ADD(CURDATE, INTERVAL 6 DAY) 

... ou vous pouvez utiliser BETWEEN ...

SELECT * FROM `games` WHERE `date` 
BETWEEN CURDATE() 
AND DATE_ADD(CURDATE(), INTERVAL 6 DAY) 

[edit]

Après avoir travaillé sur ce que vous entendiez par "afficher le lundi" dans le titre de la question. . Vous ne voulez vraiment exécuter la requête le lundi :)

Donc, soit vous voulez seulement terme la requête le lundi (effectué au niveau de l'application) ou d'exécuter la requête avec un AND DAYOFWEEK(CURDATE()) = 2 en elle il « d être quelque chose comme

SELECT * FROM `games` WHERE `date` >= CURDATE() 
AND `date` <= DATE_ADD(CURDATE, INTERVAL 6 DAY) 
AND DAYOFWEEK(CURDATE()) = 2 

Bien que ce soit plutôt inefficace que vous toujours exécuter la requête même s'il n'y a pas besoin de - il serait préférable d'avoir l'application ne l'exécuter le lundi.

Dans ce cas, vous êtes mieux avec la solution de drrcknlsn en utilisant l'objet DateTime de PHP et de faire quelque chose comme (ou munging le tout dans un emploi Cron):

if(date("N") == 1) { 
    $oNextSaturday = new DateTime('next Saturday'); 
    $sFetchUpcomingGames = "SELECT * FROM `games` WHERE `date` = '{$oNextSaturday->format('Y-m-d')}'"; 

    //execute the database query and perform relevant outputs, and so on 
} 
+0

Disons que je veux afficher ce jeu le lundi afin que ppl puisse acheter des billets à l'avance? Ensuite, la date actuelle devrait être le lundi, mais comment puis-je définir cela dans la requête, pouvons-nous utiliser DAYOFWEEK (date)? – user1225840

+0

Pourquoi la date actuelle est-elle importante? Ce que cette requête va chercher est _any game_ happening dans les 6 prochains jours si la date à laquelle la requête a lieu est lundi, mardi, mercredi ... peu importe. Ou voulez-vous ** uniquement ** exécuter la requête le lundi? Dans ce cas, vous devrez le filtrer au niveau de la couche d'application (de sorte que le SQL ne soit pas exécuté sauf si c'est lundi) ou ajouter quelque chose comme 'AND DAYOFWEEK (CURDATE()) = 2' à la requête. – CD001

+0

Merci pour ça! – user1225840

Questions connexes