【发布时间】:2011-08-11 10:01:06
【问题描述】:
我的 users 表有一个 first_name 和 last_name 列,name 是一个虚拟属性。例如我有这些记录:
Aen Tan
Lily Chou Chou
Nuon Baby
当我用两个词搜索时,我得到了预期的结果:
"aen tan" Aen Tan
"lily chou" Lily Chou Chou
但是当我用一个词搜索时,例如“aen”我得到了所有三个记录。
这是我的查询:
scope :find_by_name, lambda {|name| where("first_name LIKE ? or last_name LIKE ?", '%' + name.split(' ').first + '%', '%' + name.split(' ')[1, name.split(' ').length-1].join(' ') + '%')}
当我用一个词“aen”搜索时,它会产生这个SQL:
SELECT `users`.* FROM `users` WHERE (first_name LIKE '%aen%' or last_name LIKE '%%')
我认为问题在于姓氏为空。有什么好的解决方法?如果只给出一个词,我应该用这个词搜索两列吗?
这让我想到了我正在思考的其他事情。如果我搜索“tan+aen”,我将一无所获,但绝对有可能用户会颠倒名称的顺序。如何构建一个考虑到这一点的查询?
【问题讨论】:
标签: sql ruby-on-rails ruby search