Ich versuche, herauszufinden, wie die folgende Abfrage schreiben Esqueleto mitWas ist eine richtige Art und Weise COUNT tun (id) in Esqueleto und Yesod
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')
Hier ist, wie mein Modell definiert ist
Person
admin Bool
vip Bool
karma Int
hellbanned Bool
fast alles zu bekommen, mit Ausnahme der
COUNT
Teil
select $
from $ \p -> do
where_
((p ^. PersonAdmin ==. val True) ||. (p ^. PersonVip ==. val True)
&&. (p ^. PersonKarma >=. val 5000) &&. (p ^. PersonHellbanned ==. val False))
return $ p ^. PersonId
I manag
ich habe es geschafft ed, um eine countRows
Funktion zu finden, jedoch habe ich es nicht geschafft, einen Weg zu finden, diese beiden auf eine Art zu kombinieren, die checket.
Ich bin mir auch nicht sicher, ob ich all diese p ^.
in jedem Zweig der Where-Klausel brauchen, oder wenn diese irgendwie zusammen kollabiert werden können?
Haben Sie versucht, mit [der Count-Funktion] (http: //haddocks.fpcomplete. com/fp/7.4.2/20130829-168/persistent/Datenbank-Persist-Class.html # v: Anzahl). –
Es ist die [countRows] (https://www.stackage.org/haddock/lts-9.6/esqueleto-2.5.3/Database-Esqueleto.html#v:countRows) Funktion in 'Database.Esqueleto'. – mb21