我在scala上编写应用程序并使用slick for db编写框架。我想在db端从我的表中选择随机行。像这样:
val items = TableQuery[ItemTable]
val db = Database.forConfig("db.default")
def getRandom: Item = ???
有什么想法吗?我当前的实现是select all as list并在scala代码上选择随机。
答案 0 :(得分:2)
您可以为光滑3定义自定义功能。
以下是示例:
val randomFunction = SimpleFunction.nullary[Double]("rand")
db.run(userTable.sortBy(x=>randomFunction).take(1).result
它生成下一个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
对于Slick 3.1.0-RC1:
select x3."field1" as "field1", x3."field2" as "field2" from "Table" x3 order by rand() limit 1
但是你应该知道"rand"
函数是特定于数据库的。
答案 1 :(得分:0)
它取决于您使用的数据库而不是Slick。
您需要使用纯SQL,在回答此问题的How to request a random row in SQL?
的答案中,对不同的数据库有一个很好的描述MySQL示例:
SELECT column FROM table
ORDER BY RAND()
LIMIT 1