这是我试过的查询:
@blogs = DB[:blogs].where(:title => params[:s_txt]).reverse_order(:id)
在此查询中,我想在我的数据库中查找博客。我还需要创建一个查询,为用户提供更多结果。我怎么能这样做?
答案 0 :(得分:1)
最好使用dynamic parameters来避免SQL注入:
@blogs = DB[:blogs].where("title LIKE ?", "%#{params[:s_txt]}%").reverse_order(:id)
或
@blogs = DB[:blogs].where("title LIKE :text", text: "%#{params[:s_txt]}%").reverse_order(:id)
您可以轻松地为此添加更多参数:
@blogs = DB[:blogs].where("title LIKE ? OR content LIKE ?", "%#{params[:s_txt]}%", "%#{params[:s_txt]}%").reverse_order(:id)
或
@blogs = DB[:blogs].where("title LIKE :text OR content LIKE :text", text: "%#{params[:s_txt]}%").reverse_order(:id)
答案 1 :(得分:0)
我也有这个问题,只找到了这个解决方案
@blogs = DB[:blogs].where("title LIKE '%#{params[:s_txt]}%'").reverse_order(:id)
好奇,如果有更好的方法..
在两个字段中搜索重复LIKE并按AND或OR
分隔@blogs = DB[:blogs].where("title LIKE '%#{params[:s_txt]}%'
or comment LIKE '%#{params[:c_txt]}%'").reverse_order(:id)
或者像这样做
@blogs = DB[:blogs].where("title||comment LIKE '%#{params[:s_txt]}%'").reverse_order(:id)
在Sqlite中测试,它的工作原理。一个建议:在lage表中,如果可能的话,你最好删除第一个%,因为数据库将执行全表扫描,否则不使用索引,但你可以在sql问题中找到所有这些东西。