0
我在我的Phoenix應用程序的三個表上運行搜索功能,並且我想使用SQL的UNION運算符等方式加入它們。使用Ecto執行聯盟
我有三個表:
mix phx.gen.json Accounts User users handle:string email:string
mix phx.gen.json Content Post posts title:string content:string
mix phx.gen.json Content Category categories name:string
假設沒有外鍵或鏈接表。
如果我想在運行SQL在這些搜索,我會做這樣的事情:
SELECT handle FROM users WHERE handle LIKE "%string%"
UNION
SELECT title FROM posts WHERE title LIKE "%string%"
UNION
SELECT name FROM categories WHERE name LIKE "%string%"
然而,外生2似乎並不支持工會。我想要做這樣的事情:
query1 =
from u in User,
where: ilike(u.handle, ^"%#{str}%"),
select: u
query2 =
from p in Post,
where: ilike(p.title, ^"%#{str}%"),
select: p
query3 =
from c in Category,
where: ilike(c.name, ^"%#{str}%"),
select: c
union = Ecto.SomethingLikeAUnion([query1, query2, query3])
result = Repo.all(union)
這樣做的最佳方法是什麼?
你問的不是什麼,但...這是我經常使用類似的情況下, Elasticsearch。它在搜索方面做得更好,聯盟也不會成爲問題。完全可以理解,但如果您猶豫是否將額外的技術添加到您的應用程序中。 – cleaver