i.a*_*iel 11 scala scalaquery playframework-2.0 slick
我想面对一个我想简化的问题:(很确定,事实上我做错了).
我想计算id = 1的用户数.在SQL语言中,让我们说它是这样的:
SELECT COUNT(*) FROM users WHERE id = 1
Run Code Online (Sandbox Code Playgroud)
我正在使用Slick的"提升"形式,所以这是我的一段代码计算用户:
Query(Users.where( _.id === 1).length).first
Run Code Online (Sandbox Code Playgroud)
实际上,这里发生的是Slick别名ScalaQuery,实际上是使用过滤器原因创建子查询,然后计算子请求的结果.
SELECT COUNT(*) FROM (SELECT * FROM users WHERE id = 1))
Run Code Online (Sandbox Code Playgroud)
对于这样的查询来说似乎是相当大的开销.
不确定这是否已从ScalaQuery更改为Slick,但请尝试:
val q = for{
id <- Parameters[Int]
t <- tableObject if t.id is id
} yield t.id.count
val cnt = q(someID).firstOption getOrElse 0
Run Code Online (Sandbox Code Playgroud)