2010-12-15 57 views
0
$nextWeek = time() + (7 * 24 * 60 * 60); 

Ceci est ajouté à la base de données.Si l'heure est passée

Je veux sélectionner * où heure = heure actuelle() ou est dans le futur .. et pas dans le passé.

Je veux que * soit sélectionné à partir de la base de données où l'heure n'est pas passée ... c'est dans le futur. ou présent.

SELECT * FROM affbanners WHERE timedate=what and active=1 order by rand() limit 1 

Je souhaite que l'heure soit présente ou future et non antérieure. cela signifie que le temps n'aurait pas dû être dépassé.

timedate est défini par

$nextWeek = time() + (7 * 24 * 60 * 60); 

Répondre

3

Si l'horloge du serveur de base de données est correcte, vous pouvez simplement utiliser une requête de la forme:

SELECT * FROM <table name> WHERE <time field> >= NOW(); 

Cependant, pour garder votre question que je vais pour ...

$nextWeek = time() + (7 * 24 * 60 * 60); 
$queryString = 'SELECT * FROM affbanners WHERE active=1 AND timedate >= "'.$nextWeek.'"' ORDER BY RAND() LIMIT 1'; 

Cela dit, vous voudrez peut-être considérer si vous voulez que les bannières soient sélectionnées de manière "équilibrée" (plutôt que simplement aléatoire). (C.-à-:. Pour que chaque bannière obtient un taux de vue à peu près similaire)

Pour ce faire, vous aurez besoin de:

  1. Ajouter un nombre « view » à chaque bannière (qui est incrémenté lorsqu'une bannière est vue). Vous pouvez bien sûr utiliser les clics, etc. si vous les suivez.
  2. Utilisez une requête comme ...

    SELECT * FROM affbanners OÙ active = 1 ET timedate> = « . $ NextWeek. '"' ORDER BY view_count ASC LIMITE 1

Par Ce faisant, vous équilibrerez le nombre de vues au fil du temps.

MISE À JOUR

Si tel est le cas, je serais très tenté d'avoir des champs startdate et enddate dans votre base de données (lorsque la bannière peuplée est créée) et utiliser une requête comme ...

SELECT * FROM affbanners WHERE active=1 AND startdate >= NOW() AND enddate <= DATE_ADD(NOW(), INTERVAL 1 WEEK) ORDER BY view_count ASC LIMIT 1 

Vous aurez bien sûr besoin de suivre les vues, les clics, etc. Cela dit, c'est un problème très résolu, donc il pourrait être plus facile d'utiliser quelque chose comme OpenX. (Il existe une version open source que vous pouvez télécharger.

+0

$ nextWeek est défini lors de la création de la bannière et pas à nouveau. Il devrait donc être timedate> = time(); ? – friendishan

+0

Dans ce cas, utilisez simplement "WHERE time> = NOW()". Cependant, je serais tenté de ne pas essayer de stocker une date «future» dans la bannière, car il est assez insignifiant de stocker une date relative comme celle-ci. Au lieu de cela, pouvez-vous stocker "vivre de" et "vivre jusqu'à" dates? Je soupçonne que cela vous faciliterait la vie à long terme. –

+0

ok ce que je suis en train de faire est .. exposition de rotation hebdomadaire bannière bannière. – friendishan

0

Vous pouvez calculer l'heure actuelle dans votre script PHP et mettre cela en $ temps. Ensuite, faites une requête comme

SELECT * FROM affbanners OÙ timedate> = $ temps et ordre actif = 1 par rand()

Cela devrait vous donner toutes les bannières ayant leur temps mis à présent ou l'avenir.

+0

donc, $ temps = temps(); – friendishan

+0

Oui ou n'importe quand vous le voulez. –