论坛首页 编程语言技术论坛

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

浏览 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吧。

 

 

   发表时间:2008-08-09  
为什么要用inner join而不用:include?如果不是速度很漫的话,:include可以完全胜任。照你这么做,每次reload,d典型的n+1问题。inner join会不会这样忘了,机器刚重装,一会弄个mysql试试

还有,person的复数是people,谢谢!
0 请登录后投票
   发表时间:2008-08-09  
include遇到大表也很慢,大多数情况下拆分成几次小查询性能更好
0 请登录后投票
   发表时间:2008-08-09  
刑天战士 写道
还有,person的复数是people,谢谢!


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


0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics