【发布时间】:2020-03-03 07:02:04
【问题描述】:
我正在尝试从具有多个过滤器的数据库中进行选择。代码:
// name is List("Denis", "Semen")
val query = name.map(_ + "%").mkString(" OR name LIKE ")
sql"SELECT * FROM phonebook WHERE name LIKE ${query+"%"}"
.query[Contact]
.to[List]
.transact(tr)
结果查询是这样的:SELECT * FROM phonebook WHERE name LIKE Denis% OR name LIKE Semen%
我什么也没得到。只有当 SELECT 只有一个名称时,我才会得到一些东西:SELECT * FROM phonebook WHERE name LIKE Denis%。
我也试过这个:
val query = name.map("'" + _ + "%'").mkString(" OR name LIKE ") // 'denis%' OR NAME LIKE 'benis%'
结果查询是这样的:SELECT * FROM phonebook WHERE name LIKE 'Jhon%' OR name LIKE 'Lena%',但是在Doobie中不需要使用',所以即使一个名字也不会返回任何东西:SELECT * FROM phonebook WHERE name LIKE 'Jhon%'。
【问题讨论】:
-
我现在使用
{ for { n<-names } yield {sql...} }.flatSequence作为解决方法。