欢迎光临Software MyZone,有问题可留言或到站点论坛发帖,争取第一时间帮忙解决 || 站点论坛:火龙论坛 || 淘宝小店:应小心的易淘屋 【欢迎大家提建设性意见】

rails base 之数据库—查询

Ruby代码 
  1. a = Category.new(:name => ’Ruby’, :position => 1)
  2. a.save
  3. # save 还有相同方法”save!”
  4. # 有无惊叹号的差别在于validate资料验证不正确的动作,
  5. # 无惊叹号版本会回传布林值(true或false),有惊叹号版本则是验证错误会丢出例外。
  6. b = Category.create(:name => ’Perl’, :position => 2)
  7. # create也有“create!”方法,作用同save
  8. # create在执行的时候已经将资料插入数据库,无须再调用save方法
  9. b.save(:validate => false)
  10. # 透过:valiate => false 可以略过验证
  11. # create虽然无需再调用save方法,但仍然可以调用save方法。
  12. Category.first
  13. # 取出第一条记录
  14. Category.last
  15. # 取出最后一条记录
  16. Category.all
  17. # 取出所有
  18. Category.find(1)
  19. # 取出id=1的记录
  20. Category.find(1, 3)
  21. Category.find([1, 3])
  22. # 取出id为1和3的记录
  23. # find方法会在没有取到符合条件的记录时抛出错误
  24. # 如果你不想这样,请用:find_by_id
  25. Category.find_by_name(‘Ruby’)
  26. # 取出name字段等于“Ruby”的记录
  27. # 可以用and进行多字段查询
  28. Category.find_by_name_and_postion(‘Ruby’, 1)
  29. # 取出name=’ruby’ and postion=1的记录
  30. # find_by_* 和 find_all_by_*它们的不同之处是前者会进行“limit 1”限制
  31. Category.find_by_sql(“SELECT * FROM categories WHERE name LIKE ’%p%’”)
  32. # 如果你想自己手写sql就可以使用这个方法
  33. # find_by_sql没有“find_all_by_sql”方法
  34. Category.where(:name => ’Ruby’, :position => 1)
  35. # `name` = ’Ruby’ AND `position` = 1
  36. Category.where(["name = ? or position = ?", 'Ruby', 3])
  37. # `name` = ’Ruby’ OR `position` = 3
  38. # 另外,where 是lazy loading,也就是直到真的需要取值的时候,才会跟资料库拿资料。
  39. # 如果需要立即触发,可以接着使用.all, .first, .last,例如:
  40. # Category.where(["name = ? or position = ?", 'Ruby', 3]).all
  41. Category.limit(5).all
  42. # 限制查询记录数,它只接受这一个参数
  43. # 如果要使用形如:“limit x, y”请组合使用“offset”方法
  44. Category.order(“position”)
  45. Category.order(“position DESC”)
  46. Category.order(“position DESC, name ASC”)
  47. # 对内容排序
  48. Category.order(“position”).reorder(“name”)
  49. # 改用name 排序
  50. Category.order(“position”).reorder(nil)
  51. # 取消所有排序
  52. Category.limit(3).offset(2)
  53. # 从第二条开始显示3条记录
  54. Category.select(‘id, name’)
  55. # 只查询出id,name栏位的数据
  56. Category.readonly.first
  57. # 使用readonly可以使查询出来的结果不能再次改变其值
  58. # 以上查询方法可以进行无顺序的自由的串接:
  59. # Category.select(..).order(..).limit(.)….
  60. Category.where(“position > 1″).find_each do |category|
  61.   category.do_some_thing
  62. end
  63. # 如果资料量很大,但是又需要全部拿出来处理,可以使用find_each 批次处理
  64. Category.find_each(:batch_size => 2) do |category|
  65.   puts category.id
  66. end
  67. # 预设会批次查出1000条,如果需要设定可以加上:batch_size 参数。
  68. c = Category.all
  69. c.reload
  70. # reload 重新查询出结果给c
  71. c = Category.first
  72. c.destory
  73. # 删除id = c.id的资料
  74. Category.delete(2)
  75. # 删除id = 2的资料
  76. Category.count
  77. # 获取记录总数
  78. Category.average(:position)
  79. Category.maximum(:position)
  80. Category.sum(:position)
  81. # 略过…
  82. Category.where(["position>?", 2]).count
  83. # 用where缩小范围
  84. c = Category.first
  85. c.update_attributes(:position => 6)
  86. # or
  87. # 注意下边这个,我照书上抄的,老是报错,好像不行,试着传hast,array,symbol都不行
  88. # 版本 3.1.0
  89. c.update_attributes(‘position’, 6)
  90. # 更新id = c.id的记录使栏柆position=6
  91. # 同类方法:“update_attributes!”
  92. a = Order.select(“*,sum(price) as p,count(*) as c”).where(“a=? ”,2).group(“date_format(created_at,’%Y-%m’)”)
  93. #select 指定要查询的字段
  94. #group 分组
  95. # date_format mysql中的时间格式化
Tags: