`
andyhu1007
  • 浏览: 193931 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

再发一些rails和数据库有意思的问题和意见

阅读更多

1. 数据库查询

 

    people = Person.find(:all, :joins => "INNER JOIN accounts ON people .id = accounts.person_id",

               :conditions => "people .gender = 'male' AND accounts.number < 10",

               :select => "*")

 

    有啥问题?

 

    如果people表和accounts表有一个相同name的column,取得的people需要reload一下才能用,不然使用时取不到那个字段的值。这是由于查询时的 ambiguous field问题引起的。

 

    如何解决?

 

    people = Person.find(:all, :joins => "INNER JOIN accounts ON people.id = accounts.person_id",

               :conditions => "people.gender = 'male' AND accounts.number < 10",

               :select => "people. *")

 

2. 关联表

 

    项目开发到后期,往往会发现关联表因为汇聚越来越多的有用信息,需要实现成model。所以项目刚开始就给关联表加上id吧。

 

 

分享到:
评论
3 楼 andyhu1007 2008-08-09  
刑天战士 写道
还有,person的复数是people,谢谢!


谢谢提醒,因为是随便写了一段代码举个例子,没注意,改了。


2 楼 neodoxy 2008-08-09  
include遇到大表也很慢,大多数情况下拆分成几次小查询性能更好
1 楼 刑天战士 2008-08-09  
为什么要用inner join而不用:include?如果不是速度很漫的话,:include可以完全胜任。照你这么做,每次reload,d典型的n+1问题。inner join会不会这样忘了,机器刚重装,一会弄个mysql试试

还有,person的复数是people,谢谢!

相关推荐

Global site tag (gtag.js) - Google Analytics