slick3:选择随机行

时间:2015-09-17 21:13:06

标签: scala playframework slick

我在scala上编写应用程序并使用slick for db编写框架。我想在db端从我的表中选择随机行。像这样:

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

def getRandom: Item = ???

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

2 个答案:

答案 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