如何使用Slick使用过滤器计算结果?

时间:2012-10-12 15:43:21

标签: scala playframework-2.0 scalaquery slick

我遇到了一个我想简化的问题:(很确定,事实上我做错了。)

通缉

我想计算一个id = 1的用户数。在SQL语言中,让我们说它是这样的:

SELECT COUNT(*) FROM users WHERE id = 1

代码

我正在使用Slick的“提升”形式,所以这是我的一段代码计算用户:

Query(Users.where( _.id === 1).length).first

实际上,这里发生的是Slick别名ScalaQuery实际上是在创建带有过滤器原因的子查询,然后计算子请求的结果。

SELECT COUNT(*) FROM (SELECT * FROM users WHERE id = 1))

对于这样的查询来说似乎是非常大的开销。

1 个答案:

答案 0 :(得分:9)

不确定这是否已从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