`

使用Rails怎么写这个查询?

阅读更多
我做一个在线考试系统。
我先作了题库,我希望能够从题库中随机选择一定数目的题,并生成一份试卷。
在随机选择一定数目的题的地方没有找到比较好的方式:
Rails好像没有提供存储过程的操作接口。
试题由于删除等原因,id是不连续的。
我现在想到的方式有两种:
1)将所有题目的id查询出来放在一个数组中,然后产生若干个随机数并去掉
重复元素作为数组,从而选定题目,然后拼接sql语句进行查询,这样的缺点是查询所有数目
的试题id放在数组中,如果数目过多,这样做很耗内存.(当然可以通过limit来
限制数量,但数据库默认会建立索引,查询的时候会按照某种顺序列出,后面的题
就没有被选的机会了)
2)先查出题目的数目n,然后在1..n之间生成一定数目的随机数,作为题目id,如果查询到的
题目数目不够,再随机生成随机数,再查询生成,直到查询到足够的题目为止,这样
做缺点是每一步生成随机数还得以前的随机数去除重复,并且查询次数未知.

希望大家能给我一个解决这个问题的更好的方案.
分享到:
评论
2 楼 fuliang 2007-05-01  
引用

搜了一个:
mysql: select * from tablename order by rand() limit 10
sqlserver: select top 10 * from tablename order by NEWID()

不知道是否可行。效率可能不高,这种排序方式应该会相起全表扫描,有多少条记录就会调用多少次取随机数。

这里搜到一个优化版本:
http://www.kingmx.com/article/11487

我都没有做过测试,这种问题还是自己google吧,我用"select 随机"作关键字,找出一大堆结果。。。


谢谢了,没想到还有这么一个技巧,我也到google上搜了,
不过没找到像你说的"select 随机"那么好的关键词,没搜到什么答案。
1 楼 qiezi 2007-05-01  
搜了一个:
mysql: select * from tablename order by rand() limit 10
sqlserver: select top 10 * from tablename order by NEWID()

不知道是否可行。效率可能不高,这种排序方式应该会相起全表扫描,有多少条记录就会调用多少次取随机数。

这里搜到一个优化版本:
http://www.kingmx.com/article/11487

我都没有做过测试,这种问题还是自己google吧,我用"select 随机"作关键字,找出一大堆结果。。。

相关推荐

    Advanced Rails

    **高级Rails** Rails,全称为Ruby on Rails,是一款基于Ruby..."Advanced Rails"这本书是进一步提升Rails技能的宝贵资料,通过阅读和实践,开发者能够深入理解Rails框架,解决复杂问题,创建高效、可扩展的Web应用。

    配置高可用的rails

    本文将介绍如何配置一个高可用的rails应用,这里会使用图文并茂的形式,结合笔者的实践经验,来讲解配置过程和相关的知识点。 首先,高可用的配置通常需要多个组件的协调工作。rails应用通常包括前端、后端、数据库...

    Ruby on Rails 指南 v5.0.1 中文版

    - **创建Rails项目**:介绍如何使用`rails new`命令来生成一个新的Rails项目,包括如何指定版本和其他选项。 - **Hello, Rails!**:通过一个简单的“Hello, World!”示例,让读者快速上手Rails的基本操作流程。 - **...

    Ruby on Rails 教程 - 201406

    这个框架的核心理念是“Convention over Configuration”,即约定优于配置,减少了开发者需要写的配置代码。 Rails的ActiveRecord是ORM(对象关系映射)库,使得Ruby类可以直接映射到数据库表,简化了数据库操作。...

    Rails 3中的Active Record的查询变化.doc

    对于查询第一条或最后一条记录,旧的`find(:first, :order => "published_at desc")`在Rails 3中可以写成`Article.order("published_at desc").first()`,或者考虑到效率和简洁性,可以使用`Article.order(...

    Rails Best Practices

    **Rails最佳实践** Rails,全称Ruby on Rails,是一个基于Ruby语言的开源Web应用程序框架,遵循MVC(模型-视图-控制器)架构模式。...在实际开发过程中,不断学习和积累经验,才能更好地驾驭Rails这个强大的框架。

    ruby on rails对mongodb的操作

    例如,如果我们要创建一个`User`模型,使用`mongoid`会这样写: ```ruby class User include Mongoid::Document field :name, type: String field :email, type: String end ``` 而使用`mongo_mapper`则是: `...

    ruby on rails 实践

    通过这一章的学习,读者将对Rails框架有一个整体的认识,并了解如何搭建开发环境以及设计用户界面(UI)。 第二章“Rails中的资源应用”,详细解释了使用scaffold命令创建资源的步骤,以及如何实现REST...

    Complex Rails system_Rails_优化_

    3. **数据缓存**:使用低级缓存`Rails.cache`存储查询结果,避免重复计算。 三、代码优化 1. **避免在循环中进行数据库查询**:将查询移到循环之外,减少不必要的数据库交互。 2. **减少视图复杂性**:保持视图...

    ruby on rails 实例代码

    Ruby on Rails,简称Rails,是一个基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发更高效、更简洁。在本实例代码中,我们将深入探讨如何利用Rails进行数据库操作,...

    rails文档API

    Rails文档API是Ruby on Rails框架的重要组成部分,它为开发者提供了详尽的指南和参考材料,帮助他们理解和使用这个强大的Web开发工具。Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用程序框架,遵循MVC...

    web开发_ruby_on_rails

    此外,Rails还广泛使用了**ActiveRecord**模式,这是一种用于数据库交互的ORM(Object-Relational Mapping)技术,能够简化数据库操作,使得开发者能够更专注于业务逻辑而非底层数据处理细节。 - **Model (模型)**: ...

    Crafting Rails Applications

    - 例如,书中可能涵盖了如何使用Rails 3中的新API来优化数据库查询、如何利用新的路由系统来创建更加灵活的URL结构等内容。 2. **自定义Render方法:** - 通常情况下,Rails开发者使用`render`方法来渲染视图模板...

    Advanced Rails Recipes

    这为那些希望学习高级Rails技术但又受限于经济条件的学习者提供了一个绝佳的机会。同时,它也鼓励了技术社区内的知识共享精神。 #### 部分内容中的关键知识点 ##### Part I—REST and Routes Recipes 这部分主要...

    Agile Web Development with Rails (4th edition).pdf

    - **Rails架构**:Rails遵循MVC(Model-View-Controller)设计模式,这使得应用程序结构清晰、易于维护。 - **开发理念**:强调“约定优于配置”,通过默认设置简化开发过程,减少重复工作。 - **数据库访问**:...

    Ruby on Rails实践之路给PHP和Java开发者的书

    4. **ActiveRecord**:深入讲解ActiveRecord的使用,包括模型的定义、数据库迁移、查询语句以及关联关系。 5. **视图和模板引擎**:讲述ERB或Haml等模板语言的使用,以及如何组织和渲染视图。 6. **控制器**:讨论...

    neo4j_ancestry:这个 ruby​​ on rails gem 使得在与使用 ActiveRecord 并行的 Neo4j 图形数据库中存储多态结构信息变得容易——父母、孩子、祖先、后代……

    这个 ruby​​ on rails gem 可以很容易地在一个与使用 ActiveRecord 并行的存储多态结构信息—— parents 、 children 、 ancestors 、 descendants ……。 所有相关信息都存储在您的默认 ActiveRecord 数据库中...

    Ruby-HighVoltage容易在Rails应用程序中包含静态页面

    **Ruby-HighVoltage在Rails应用中的使用...通过使用这个gem,你可以专注于内容创作,而不必担心过多的数据库交互或复杂的路由设置。无论你是初学者还是经验丰富的开发者,High Voltage都能帮助你更高效地构建静态站点。

    Ruby On Rails

    在RoR中,数据库操作主要通过ActiveRecord实现,这是一个ORM(对象关系映射)库,它允许开发者用Ruby代码直接操作数据库,无需编写SQL。ActiveRecord的特性包括数据验证、关联和查询,使得数据库操作变得简单易懂。 ...

    rails-base:基于Rails的新项目的框架

    Rails基地 Rails Base是Flatstack上使用的基本Rails应用程序模板。 它基于Rails 6和Ruby 2.7 应用宝石 用于Sass / Scss样式表 作为CSS框架。 有关更多信息,请参见 ...用于检测N + 1查询和未使用的紧急加载的项目

Global site tag (gtag.js) - Google Analytics