浏览 2215 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (7) :: 隐藏帖 (9)
|
|
---|---|
作者 | 正文 |
发表时间:2008-08-08
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吧。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-08-09
为什么要用inner join而不用:include?如果不是速度很漫的话,:include可以完全胜任。照你这么做,每次reload,d典型的n+1问题。inner join会不会这样忘了,机器刚重装,一会弄个mysql试试
还有,person的复数是people,谢谢! |
|
返回顶楼 | |
发表时间:2008-08-09
include遇到大表也很慢,大多数情况下拆分成几次小查询性能更好
|
|
返回顶楼 | |
发表时间:2008-08-09
刑天战士 写道 还有,person的复数是people,谢谢!
谢谢提醒,因为是随便写了一段代码举个例子,没注意,改了。 |
|
返回顶楼 | |