我使用以下sql语句:
Keyword.where("id IN (#{params[:keyword_ids]})").order("find_in_set(id, '#{params[:keyword_ids]}')")
这个语句的问题是,如果“关键字id”持有相同的id,则调用只返回它的id。
但是,我需要相同的数字(未实现)以及相同的顺序(使用此语句实现),如果相同的id发生的次数多于其他的,则不依赖于数组中的。
我该如何修改这句话。
谢谢你,小点
发布于 2014-09-25 09:23:18
嗯,那不是一个bug,它是一个特性;)
我的第一个建议是净化你的意见。尽管Rails框架提供了帮助,但直接将params[:keyword_ids]
传递到数据库,迟早还是会导致某种漏洞。
其次,最简单的解决方案可能是保持查询原样,将结果转换为映射,并将输入参数映射到结果。
赛斯样
keywords = Keyword.where('id IN (?)', checked_keyword_ids)
keyword_map = Hash[keywords.map { |kw| [kw.id, kw] }]
checked_keyword_ids.map { |id| keyword_map[id] }
https://stackoverflow.com/questions/26034340
复制相似问题