Nor*_*mal 1 scala playframework slick
我在 scala 上编写应用程序,并使用 slick for db 运行框架。我想从数据库端的表中选择随机行。像这样的东西:
val items = TableQuery[ItemTable]
val db = Database.forConfig("db.default")
def getRandom: Item = ???
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我当前的实现是选择全部作为列表并在 scala 代码上随机选择。
您可以为 slick 3 定义自定义函数。
这是示例:
val randomFunction = SimpleFunction.nullary[Double]("rand")
db.run(userTable.sortBy(x=>randomFunction).take(1).result
Run Code Online (Sandbox Code Playgroud)
它生成下一个 sql(对于 Slick 3.0.3):
select x2."field1", x2."field2" from (select x3."field1" as "field1", x3."field2" as "field2" from "Table" x3 order by rand() limit 1) x2
Run Code Online (Sandbox Code Playgroud)
对于 Slick 3.1.0-RC1:
select x3."field1" as "field1", x3."field2" as "field2" from "Table" x3 order by rand() limit 1
Run Code Online (Sandbox Code Playgroud)
但您应该知道该"rand"函数是特定于数据库的。