0
我有一個查詢字段,查詢兩個不同表格中的三個不同列:位置表中的「公司」和「行業」以及教育表中的「學校」。它已成功返回滿足在搜索字段中輸入的所有字段的所有用戶(使用select_tag)。這是從我的觀點:這個查詢不是有效的
<%= form_tag(search_path, :method => :get, :id => "people_search") do %>
<div class="row-fluid">
<div class="span4">
<table>
<tr>
<td>
<div class="search-table" style="padding-left:55px">
<%= select_tag "all", options_for_select((@visible_companies + @visible_industries + @visible_schools).uniq, params[:all]), { :placeholder => "Search by companies, industries and schools...", :multiple => true, :js => "if (evt.keyCode == 13) {form.submit();}" } %>
</div>
</td>
<td>
<%= submit_tag "Add", id: "send-button", style:"width:175px;" %>
</td>
</tr>
</table>
</div>
<% end %>
</div>
和控制器:
@visible_positions = Position.where{ is_visible.eq('true') }
@visible_educations = Education.where{ is_visible.eq('true') }
@visible_companies = @visible_positions.order("LOWER(company)").map(&:company).uniq
@visible_industries = @visible_positions.order("LOWER(industry)").map(&:industry).uniq
@visible_schools = @visible_educations.order("LOWER(school)").map(&:school).uniq
@c = @visible_positions.where{company.in(my{params[:all]})}.map(&:user_id)
@i = @visible_positions.where{industry.in(my{params[:all]})}.map(&:user_id)
@s = @visible_educations.where{school.in(my{params[:all]})}.map(&:user_id)
@C = @visible_positions.where{company.in(my{params[:all]})}.map(&:company)
@I = @visible_positions.where{industry.in(my{params[:all]})}.map(&:industry)
@S = @visible_educations.where{school.in(my{params[:all]})}.map(&:school)
@blacklist = []
@cis = @c + @i + @s
@experiences = ([@C,@I,@S].reject(&:empty?).reduce(:&))
@cis.uniq.each do |user_id|
unless @C.empty?
@C.uniq.each do |company|
unless Position.find_all_by_company(company).map(&:user_id).include?(user_id) || Position.find_all_by_industry(company).map(&:user_id).include?(user_id) || Education.find_all_by_school(company).map(&:user_id).include?(user_id)
@blacklist << user_id
end
end
end
unless @I.empty?
@I.uniq.each do |industry|
unless Position.find_all_by_industry(industry).map(&:user_id).include?(user_id) || Position.find_all_by_company(industry).map(&:user_id).include?(user_id) || Education.find_all_by_school(industry).map(&:user_id).include?(user_id)
@blacklist << user_id
end
end
end
unless @S.empty?
@S.each do |school|
unless Education.find_all_by_school(school).map(&:user_id).include?(user_id) || Position.find_all_by_company(school).map(&:user_id).include?(user_id) || Position.find_all_by_industry(school).map(&:user_id).include?(user_id)
@blacklist << user_id
end
end
end
end
unless @c.empty? && @i.empty? && @s.empty?
@users = User.find(@cis - @blacklist)
end
搜索看起來是這樣的(注意單場),與樣本查詢包括(注意和過濾...我」 M在適合所有的搜索字詞[「達特茅斯學院」學校,「世界衛生組織」的公司,爲行業的互聯網'])數據庫的唯一用戶:
我意識到這不是一個有效的查詢,並且正在考慮如何加速它,但是可以在這一點上使用一些想法。
快樂土耳其一天:)
公司和行業是公司名稱還是行業名稱存儲在文本字段中並用逗號分隔的列? – sufleR