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"
函数是特定于数据库的。
我在 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"
函数是特定于数据库的。