|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (7) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2008-04-18
7thbyte 写道 shawnccx 写道 Mysql::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 0, 5' at line 1: select * from movies order by rand() limit 20 LIMIT 0, 5 之前的问题我也意识到了,但现在由于分页为每页5个单位,导致sql语句有错误. ummm... 先随机拿出20条再分页么。。 看来是一个子查询的问题。。 这么写吧... 子查询 as a 或者as xxx... @movies=Movie.paginate_by_sql "select * from (select * from movies order by rand() limit 20) as a", :per_page => 5, :page => params[:page] 我用控制台测试了一下应该没问题 恩,可以了,非常感谢,我ror刚上手,在做一个小demo |
|
| 返回顶楼 | |
|
时间:2008-04-18
引用 ummm... 先随机拿出20条再分页么。。 看来是一个子查询的问题。。 这么写吧... 子查询 as a 或者as xxx... @movies=Movie.paginate_by_sql "select * from (select * from movies order by rand() limit 20) as a", :per_page => 5, :page => params[:page] 我用控制台测试了一下应该没问题 我想改进一下,现在的情况每次翻页之后这随机的20部电影都在变化。(比如从第2页回到第1页后,现在的电影和之前第1页的不一样。) 我想改成翻页的时候这取出的20部电影不要变化。是不是要用到session 能不能说说具体做法 |
|
| 返回顶楼 | |
|
时间:2008-04-18
在一次会话中保持搜索结果不变么..
试试这样:
# 如果session中没有保存movies_ids,则随机从数据库选取20条
unless session[:movies_ids]
# 这里对取出的20条按id排序一下以保证后来的顺序
top_movies=Movie.find_by_sql "select * from (select * from movies order by rand() limit 20) as a",
:order=>'id'
movies_ids=Array.new
top_movies.each do |m|
movies_ids<<m.id
end
# 把取出的20部电影的id存入session中对象
session[:movies_ids]=movies_ids
end
# 取session中movie_ids
@movies=Movie.paginate_by_id session[:movies_ids],:order=>'id',:per_page=>5,:page=>params[:page]
随便写的不太优美,因为一上来要多查一次数据库 还有优化的余地 代码未测试,可能有笔误 |
|
| 返回顶楼 | |
|
时间:2008-04-18
7thbyte 写道 在一次会话中保持搜索结果不变么..
试试这样:
# 如果session中没有保存movies_ids,则随机从数据库选取20条
unless session[:movies_ids]
# 这里对取出的20条按id排序一下以保证后来的顺序
top_movies=Movie.find_by_sql "select * from (select * from movies order by rand() limit 20) as a",
:order=>'id'
movies_ids=Array.new
top_movies.each do |m|
movies_ids<<m.id
end
# 把取出的20部电影的id存入session中对象
session[:movies_ids]=movies_ids
end
# 取session中movie_ids
@movies=Movie.paginate_by_id session[:movies_ids],:order=>'id',:per_page=>5,:page=>params[:page
随便写的不太优美,因为一上来要多查一次数据库 还有优化的余地 代码未测试,可能有笔误 第五行把order排列放到sql语句里 top_movies=Movie.find_by_sql "select * from (select * from movies order by rand() limit 20) as a order by id" |
|
| 返回顶楼 | |




