私はページ分割されたリソースを実行しています。これには、SQL 用語で既に設計した内部選択が必要です。次の構造があります。
select *
from (
select w.*, d.distance
from `Work` w
inner join AdrDistance d on d.nhood2 = w.nhood
where d.nhood1 = 1 -- this will be a variable
order by d.distance
limit 0, 10 -- this will be pagination
) w
inner join WImage wi on wi.`work` = w.id
私のエンティティ定義:
Work
...
WImage
work WorkId
url Text
AdrNhood
city AdrCityId
name Text maxlen=100
lat Double
lng Double
-- This is a view with a computed column I used for ordering
AdrDistance
nhood1 AdrNhoodId
nhood2 AdrNhoodId
distance Distance -- type Distance = Int - in Meters
そのような構造に似たようなselect を で定義するにはどうすればよいEsqueleto
でしょうか (もちろん、単一のクエリを実行することによって)。
アップデート
私はこの道をたどろうとしました:
worksByNhood nId offset' limit' =
from $ \wi -> do
(w, d) <- from $ \(w `InnerJoin` d) -> do
on $ d ^. AdrDistanceNhood2 ==. w ^. WorkNhood
where_ (d ^. AdrDistanceNhood1 ==. val nId)
orderBy [asc (d ^. AdrDistanceDistance)]
offset offset'
limit limit'
return (w, d)
where_ (wi ^. WImageWork ==. w ^. WorkId)
return (w, d ^. AdrDistanceDistance, wi)
しかし、それは私を正しい解決策に駆り立てませんでした。誰かが私を助けることができる場合 (私がしようとしていることが実行可能ではないので、いくつかの選択を行うほうがよいと言ってもEsqueleto
)、コメントするか、私の質問に答えてください。