slick3: select 随机行

slick3: select random row

我在 scala 上编写应用程序并使用 slick for db 玩框架。我想 select 从我的数据库端的 table 随机行。像这样:

val items = TableQuery[ItemTable]
val db = Database.forConfig("db.default")

def getRandom: Item = ???

有什么想法吗?我当前的实现是 select all as list 并在 scala 代码上选择了 random。

这取决于您使用的数据库而不是 Slick。

你需要使用普通的 SQL,这个问题的答案中有对不同数据库的很好描述 How to request a random row in SQL?

MySQL 示例:

SELECT column FROM table
ORDER BY RAND()
LIMIT 1

您可以为 slick 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" 函数是特定于数据库的。