@andreychumak
junior

Как объединить два запроса where (из массива) в один?

Делаю поиск(автокомплит), нужно чтобы находил название Автошина ТЮМЕНЬ 175/70 по запросу шина 175.

Делаю с помощью ILIKE

Как получить запрос типа
SELECT "products".* FROM "products"  WHERE (title ILIKE '%шина%') AND (title ILIKE '%175%')
?

Версия рельсов 3, так что сделать:

products = Product.all
["шина", "175"].each do |word|
  products = products.where("title ILIKE ?", "%#{word}")
end

тоже не вариант.

или если без Product.all, то получиться запрос
SELECT "products".* FROM "products"  WHERE (title ILIKE '%175')

P.S. возможно построить запрос по SIMILAR TO, но здесь тоже не получается.
  • Вопрос задан
  • 1093 просмотра
Решения вопроса 1
@unabl4
ruby on rails web dev
Пользуйся мощью Arel table, <%=username%>
q = Product.arel_table[:title].matches_all(["шина", "175"])
products = Product.where(q)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov
Web developer
like %...% - это костыль.
Потом понадобится сделать нахождение "шина" по "шины".
Потом, чтобы по "шина" НЕ находилась "машина".
Потом - ранжирование результатов.
И получится говнокод, который останется только выкинуть целиком.

Почему бы сразу не писать правильно?
https://www.postgresql.org/docs/current/static/tex...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы