【发布时间】:2014-07-24 02:49:37
【问题描述】:
我正在尝试弄清楚如何使用 Esqueleto 编写以下查询
SELECT COUNT("person"."id")
FROM "person"
WHERE (("person"."admin" = 't' OR "person"."vip" = 't') // 't' as in True
OR "person"."karma" >= 5000 AND "person"."hellbanned" = 'f')
这是我的模型的定义方式
Person
admin Bool
vip Bool
karma Int
hellbanned Bool
除了COUNT 部分之外,我几乎得到了所有东西
select $
from $ \p -> do
where_
((p ^. PersonAdmin ==. val True) ||. (p ^. PersonVip ==. val True)
&&. (p ^. PersonKarma >=. val 5000) &&. (p ^. PersonHellbanned ==. val False))
return $ p ^. PersonId
我设法找到了一个countRows 函数,但是我还没有设法找到一种方法来以一种类型检查的方式将这两者结合起来。
我也不确定是否需要 where 子句的每个分支中的所有 p ^.,或者是否可以以某种方式将它们折叠在一起?
【问题讨论】:
-
您是否尝试过使用the count function。
-
Database.Esqueleto中有countRows函数。
标签: haskell yesod persistent esqueleto