我如何在sinatra的ruby中使用类似的查询?
这是我试过的查询:
@blogs = DB[:blogs].where(:title => params[:s_txt]).reverse_order(:id)
在这个查询中,我想在我的数据库中找到博客。 我还需要创建一个查询,为用户提供更多结果。 我怎样才能做到这一点?
我也有这个问题,只找到了这个解决方案
@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问题中找到所有这些东西。
最好使用动态参数来避免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)