2009-07-25 3 views
1

У меня есть таблица с датой. Например (1241037505). Также есть столбец с количеством просмотров.Выбрать Лучшие Просмотров за последние 7 дней

Маркировка данных напоминает, когда она была создана.

Поэтому я хочу выбрать верхние просмотренные темы за последнюю неделю.

Как это сделать?

ответ

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

или вы могли бы использовать это (за WishCow Ответ в)

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

Что такое значение 7 дней назад? –

+0

@Ben Shelock, (теперь значение) - (7 * 24 * 60 * 60). В php это будет время() - (7 * 24 * 60 * 60) – Nathan

+0

Вам нужно рассчитать это. Через PHP вы можете использовать time() - 604800. –

1

данные вы в настоящее время отслеживания не собирается, чтобы позволить вам выбрать сверху просматривается на прошлой неделе. Он покажет вам верхнее просматриваемое за все время или наиболее просматриваемые элементы, созданные за последнюю неделю. Если что-то было создано две недели назад, но было просмотрено больше всего на прошлой неделе, вы не можете определить, что из данных, которые вы отслеживаете. Один из способов, которым я могу это сделать, - отслеживать количество обращений к каждому элементу контента каждый день недели.

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) 
} 

Всякий раз, когда вы увеличить количество попаданий на элементе контента, вы бы также обновить таблицу daily_hits для данного содержания Ид и дня недели. Вам понадобится функция, которая преобразует текущую дату/время в день недели. Для этой цели MySql предоставляет DAYOFWEEK.

Чтобы получить наиболее просматриваемые в последней неделе, вы можете запросить так:

ВЫБРАТЬ чид, SUM (хиты) ОТ daily_hits GROUP BY чид ORDER BY SUM (хиты) DESC

Вам потребуются некоторый тип запланированного задания, который удаляет текущий день недели в полночь, чтобы вы не накапливались навсегда и, по сути, выполняли то же самое, что и в столбце хитов текущей таблицы.

+0

Я думаю, он хочет увидеть верхние просмотры, созданные на прошлой неделе. Но я могу ошибаться. –

+0

Я тоже немного смутился. Поскольку он хочет больше всего посмотреть, я думал, что созданное время не имеет значения. Я выбрал противоположное направление с надеждой, возможно, это было больше того, что он искал. –

3

Попробуйте это:

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

Его вопрос указал, что его колонка времени - это временная метка unix. Сначала вам нужно вызвать 'FROM_UNIXTIME()' в своем значении, чтобы преобразовать его в значение mysqld для MySQL. – jason

Смежные вопросы