gpt4 book ai didi

scala - 将光滑的查询组合成单个查询

转载 作者:行者123 更新时间:2023-12-04 15:09:31 24 4
gpt4 key购买 nike

使用 Slick 3.1,如何将多个查询合并为一个相同类型的查询?这是不是连接或联合 ,但结合查询“段”来创建单个查询请求。这些“段”可以是任何单独有效的查询。

val query = TableQuery[SomeThingValid]

// build up pieces of the query in various parts of the application logic
val q1 = query.filter(_.value > 10)
val q2 = query.filter(_.value < 40)
val q3 = query.sortBy(_.date.desc)
val q4 = query.take(5)

// how to combine these into a single query ?
val finalQ = ??? q1 q2 q3 q4 ???

// in order to run in a single request
val result = DB.connection.run(finalQ.result)

编辑:
预期的 sql 应该是这样的:
SELECT * FROM "SomeThingValid" WHERE "SomeThingValid"."value" > 10 AND "SomeThingValid"."valid" < 40 ORDER BY "MemberFeedItem"."date" DESC LIMIT 5

最佳答案

val q1 = query.filter(_.value > 10)
val q2 = q1.filter(_.value < 40)
val q3 = q2.sortBy(_.date.desc)
val q4 = q3.take(5)

我认为你应该做类似上面的事情(并传递 Query s)但是如果你坚持传递查询“段”,这样的事情可以工作:
type QuerySegment = Query[SomeThingValid, SomeThingValid, Seq] => Query[SomeThingValid, SomeThingValid, Seq]

val q1: QuerySegment = _.filter(_.value > 10)
val q2: QuerySegment = _.filter(_.value < 40)
val q3: QuerySegment = _.sortBy(_.date.desc)
val q4: QuerySegment = _.take(5)

val finalQ = Function.chain(Seq(q1, q2, q3, q4))(query)

关于scala - 将光滑的查询组合成单个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34388827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com