查询数据库的名字或姓氏

Posted

技术标签:

【中文标题】查询数据库的名字或姓氏【英文标题】:Query DB for first or last name 【发布时间】:2022-01-12 15:51:44 【问题描述】:

我正在为我的用户表开发搜索功能,以便我可以查询用户并将其显示在我的应用程序中。到目前为止,我已经为 first_name 工作,但我不确定用于在同一查询中搜索姓氏的语法。我的用户控制器如下所示:

  def search
   if params[:search].blank?
    redirect_to users_path and return
  else
   @parameter = params[:search].downcase
   @results = User.all.where("lower(first_name) LIKE :search", search: "%#@parameter%")
 end
end

输出:

User Load (0.9ms)  SELECT "users".* FROM "users" WHERE (lower(first_name) LIKE '%laura%')

我的搜索表单如下所示:

<div class="input-group">
    <%= search_field_tag :search, params[:search], placeholder: "Type ", class: "form-control" %>
        <div class="input-group-btn">
            <%= button_tag "Search User", class: "btn btn-info", :name => nil %>
        </div>
    </div>
<% end %>

还有我的结果页面:

<% @results.each do |result| %>
  <tbody>
     <tr>
       <td><%= link_to result.full_name, user_path(result) %></td>
       <td><%= result.email %></td>
       <td><% if result.subscribed? %>
       <span class="badge rounded-pill bg-success">Subscribed</span>
         <% else %>
       <span class="badge rounded-pill bg-danger">Not Subscribed</span>
     <% end %>

这很完美,但是我希望能够输入姓氏并显示这些结果。 我知道我已经很接近了,但我尝试过的一些事情没有奏效。

谢谢!

【问题讨论】:

【参考方案1】:

你有没有尝试改变

@results = User.all.where("lower(first_name) LIKE :search", search: "%#@parameter%")

进入

@results = User.all.where("lower(first_name) LIKE :search or lower(last_name) LIKE :search", search: "%#@parameter%")

请更新...

R

【讨论】:

这很完美。谢谢!【参考方案2】:

在 Postgres 上,您可以使用 ILIKE 执行不区分大小写的匹配:

def search
  @term = params[:search]
  redirect_to users_path and return unless @term.present?
  @users = User.where(
    'users.first_name ILIKE :term OR users.last_name ILIKE :term', 
    term: "%#@term%"
  )
end

【讨论】:

以上是关于查询数据库的名字或姓氏的主要内容,如果未能解决你的问题,请参考以下文章

Coldfusion - 查询不区分大小写的数据库

Wordpress:如何在表格查询中获取用户的名字和姓氏?

重复和拼写错误的名字和姓氏的 SQL 查询

如何从android中的单个查询中获取联系人的名字,姓氏,电子邮件ID

SQL查询多表问题

mongoDB中的名字和姓氏组合搜索