Thanks, Jonathan!
It works.

On 1월1일, 오후1시11분, Jonathan Lundell <[email protected]> wrote:
> On Dec 31, 2011, at 7:41 PM, sungchi wrote:
>
> > As an alternative,
>
> > news=db(db.news.post_time>(now-2592000.0)).select()            if
> > sort=='hot': news=news.sort(lambda row: ~row.hotness)
> > [limitby[0]:limitby[1]]            if sort=='score':
> > news=news.sort(lambda row: ~row.score)[limitby[0]:limitby[1]]
>
> > However, this error has occurred. (hotness filed is 'double')
> > TypeError: bad operand type for unary ~: 'float'
>
> Try sorting -row.hotness.
>
>
>
>
>
>
>
>
>
> > On 1월1일, 오후12시17분, Jonathan Lundell <[email protected]> wrote:
> >> On Dec 31, 2011, at 5:17 PM, sungchi wrote:
>
> >>> If I do that "limitby" range is only in the sort.
> >>> I want to sort on the entire range.
>
> >> You're right. I can't think of a way to do it in one pass.
>
> >>> On 1월1일, 오전9시17분, Jonathan Lundell <[email protected]> wrote:
> >>>> On Dec 31, 2011, at 4:07 PM, sungchi wrote:
>
> >>>>> Thanks Jonathan!
>
> >>>>> But, sort() function When using the "limitby" using the "pagination"
> >>>>> to be harder.
>
> >>>> True. What if you order by (post_time, score) in the request, and then 
> >>>> re-sort the result?
>
> >>>>> On 1월1일, 오전2시11분, Jonathan Lundell <[email protected]> wrote:
> >>>>>> On Dec 31, 2011, at 8:46 AM, sungchi wrote:
>
> >>>>>>> now=time.time()
> >>>>>>> sorts={
> >>>>>>> 'hot':~db.news.hotness,
> >>>>>>> 'score:~db.news.score,
> >>>>>>> 'new':~db.news.post_time}
> >>>>>>> orderby=sorts[sort]
> >>>>>>> limitby=(50,101)
> >>>>>>> news =db(db.news.post_time>(now-25922000.0)).select(limitby=limitby,
> >>>>>>> orderby=orderby)
>
> >>>>>>> Traceback (most recent call last):
> >>>>>>> File "/Users/web2py/gluon/restricted.py", line 204, in restricted
> >>>>>>> exec ccode in environment
> >>>>>>> File "/Users/web2py/applications/feed9/controllers/default.py", line
> >>>>>>> 352, in <module>
> >>>>>>> File "/User/web2py/gluon/globals.py", line 162, in <lambda>
> >>>>>>> self._caller = lambda f: f()
> >>>>>>> File "/Users/web2py/applications/feed9/controllers/default.py", line
> >>>>>>> 123, in index
>
> >>>>>>> news=db(db.news.post_time>(now-2592000.0)).select(limitby=limitby,orderby=o
> >>>>>>>  rderby)
> >>>>>>> File "/Users/web2py/gluon/dal.py", line 6330, in select
> >>>>>>> return self.db._adapter.select(self.query,fields,attributes)
> >>>>>>> File "/Users/web2py/gluon/dal.py", line 3463, in select
> >>>>>>> (items, tablename, fields) =
> >>>>>>> self.select_raw(query,fields,attributes)
> >>>>>>> File "/Users/sungchi9/Dropbox/python/web2py/gluon/dal.py", line
> >>>>>>> 3458, in select_raw
> >>>>>>> items = items.fetch(limit, offset=offset)
> >>>>>>> File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/
> >>>>>>> GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/
> >>>>>>> google/appengine/ext/db/__init__.py", line 2084, in fetch
> >>>>>>> return list(self.run(limit=limit, offset=offset, **kwargs))
> >>>>>>> File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/
> >>>>>>> GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/
> >>>>>>> google/appengine/ext/db/__init__.py", line 2001, in run
> >>>>>>> raw_query = self._get_query()
> >>>>>>> File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/
> >>>>>>> GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/
> >>>>>>> google/appengine/ext/db/__init__.py", line 2357, in _get_query
> >>>>>>> query.Order(*self.__orderings)
> >>>>>>> File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/
> >>>>>>> GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/
> >>>>>>> google/appengine/api/datastore.py", line 1398, in Order
> >>>>>>> (orderings[0][0], self.__inequality_prop))
> >>>>>>> BadArgumentError: First ordering property must be the same as
> >>>>>>> inequalityfilterproperty, if specified for thisquery; received
> >>>>>>> score, expected post_time
>
> >>>>>>> what's wrong? why not post_timefilterwithorderbyargument?
>
> >>>>>>http://code.google.com/appengine/docs/java/datastore/queries.html#Res...
>
> >>>>>>> If aqueryhas both afilterwith an inequality comparison and one or 
> >>>>>>> more sort orders, thequerymust include a sort order for the property 
> >>>>>>> used in the inequality, and the sort order must appear before sort 
> >>>>>>> orders on other properties.
>
> >>>>>> Just sort the result in code.

Reply via email to