The "linear" (faster, cleaner, smarted) way to do this is:
db.define_table('views_by_day',
Field('page'),
Field('refdate', 'date'),
Field('view_counter', 'integer')
)
Then, db(db.views_by_day.refdate ==
request.now.date()).select(limitby=(0,10),
orderby=~db.views_by_day.view_counter)
The "complicated" (why on earth bother with such model?!?!?!??!) way is
store data like this:
db.define_table('views_by_day',
Field('page'),
Field('refdate', 'datetime'),
Field('view_counter', 'integer')
)
query becomes:
vd = db.views_by_day
sum = vd.view_counter.sum()
today = request.now.date()
tomorrow = request.now.date() + datetime.timedelta(days=1)
db((vd.refdate>=today) & (vd.refdate<tomorrow)).select(
vd.refdate.year(),vd.refdate.month(),vd.refdate.day(),
sum, vd.page,
groupby=vd.refdate.year()|vd.refdate.month()|vd.refdate.day()|vd.page,
limitby=(0,10)
)
On Thursday, July 19, 2012 5:10:32 PM UTC+2, Andrew Evans wrote:
>
> Hello
>
> How can I query the database so it pulls the most viewed pages for the
> current day. I have a counter that calculates views on each page in total,
> I am just not sure how to implement it based on a time frame :-)
>
> *cheers and ty
>
>
>
--