2009-07-25 6 views

Répondre

0
SELECT * FROM table WHERE Date_Created > (7 days ago value) ORDER BY Hits LIMIT 0,100 

ou vous pouvez utiliser (par la réponse de WishCow)

SELECT * FROM table WHERE Date_Created > SUBDATE(NOW(), '7 day') ORDER BY Hits LIMIT 0,100 
+0

Quelle est la valeur d'il y a 7 jours? –

+0

@Ben Shelock, (maintenant la valeur) - (7 * 24 * 60 * 60). En php il serait temps() - (7 * 24 * 60 * 60) – Nathan

+0

Vous devez calculer cela. Grâce à PHP, vous pouvez utiliser time() - 604800. –

1

Les données que vous suivez actuellement ne va pas vous permettre de sélectionner le sommet vu dans la dernière semaine. Il vous montrera le haut consulté sur tous les temps, ou les articles les plus regardés créés au cours de la dernière semaine. Si quelque chose a été créé il y a deux semaines, mais a été vu plus que tout au cours de la dernière semaine, vous ne pouvez pas le déterminer à partir des données que vous suivez. Une façon que je peux voir pour le faire serait de suivre le nombre de hits que chaque élément de contenu reçoit chaque jour de la semaine.

create table daily_hits { 
    cid integer, -- content id points to the table you already have 
    dotw smallint, -- 0-6 or similar 
    hits integer 
    PRIMARY KEY (cid, dotw) 
} 

Chaque fois que vous augmentez le nombre de succès sur l'élément de contenu, vous actualiserait également la table daily_hits pour l'ID de contenu et jour de la semaine donnée. Vous auriez besoin d'une fonction qui convertit la date/heure actuelle en un jour de la semaine. MySql fournit DAYOFWEEK à cette fin.

Pour obtenir les plus vues de la semaine dernière, vous pouvez interroger comme ceci:

SELECT cid, SUM (hits) DE daily_hits GROUPE PAR ORDRE cid PAR SOMME (hits) DESC

Vous aurez besoin un type de travail planifié qui supprime le jour de la semaine en cours à minuit, de sorte que vous n'accumulez pas pour toujours et que vous effectuez essentiellement la même accumulation sur la colonne des hits de la table en cours.

+0

Je pense qu'il veut voir le sommet vu créé la semaine dernière. Mais j'ai peut-être tort. –

+0

J'étais un peu confus à ce sujet aussi. Depuis qu'il veut le plus regardé, j'ai pensé que le temps créé n'était pas pertinent. J'ai choisi la direction opposée avec l'espoir que c'était peut-être plus ce qu'il cherchait. –

3

Essayez ceci:

SELECT * WHERE 
DATEDIFF(NOW(),created_date) < 7 
+0

Sa question indiquait que sa colonne de temps était un horodatage unix. Vous devrez d'abord appeler 'FROM_UNIXTIME()' sur sa valeur, pour le convertir en une valeur de datetime MySQL natif. – jason

Questions connexes