【发布时间】:2019-07-17 12:42:06
【问题描述】:
我有一个 id 表,从 1 到 30
| id |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| . |
| . |
| . |
| 30 |
我想要做的是在这样的字符串中从中获取 10 个随机 id
(1,2,3,4,5,6,7,8,9,10)
我发现是
https://www.db-fiddle.com/f/3gTHLSTdFEac7dKbDcU43d/3
https://www.db-fiddle.com/f/3gTHLSTdFEac7dKbDcU43d/4
SELECT
CONCAT_WS(", ",
CEIL(RAND() * (SELECT MAX(id) FROM ids)),
CEIL(RAND() * (SELECT MAX(id) FROM ids)),
CEIL(RAND() * (SELECT MAX(id) FROM ids)),
CEIL(RAND() * (SELECT MAX(id) FROM ids)),
CEIL(RAND() * (SELECT MAX(id) FROM ids)),
CEIL(RAND() * (SELECT MAX(id) FROM ids)),
CEIL(RAND() * (SELECT MAX(id) FROM ids)),
CEIL(RAND() * (SELECT MAX(id) FROM ids)),
CEIL(RAND() * (SELECT MAX(id) FROM ids)),
CEIL(RAND() * (SELECT MAX(id) FROM ids))
) AS random_ids
有没有不使用ORDER BY RAND()的更快更高效的方法?
还有没有办法让它们变得独一无二,就像在它们之间留出空隙一样?
【问题讨论】:
-
你能在这 10 个中允许重复的 id 吗?
-
@SalmanA 是的,如果有办法实现唯一性,那就太好了
-
如果你想要的只是 10 个 1 到 30 之间的随机数,那么表格的意义何在?
-
@Strawberry 可以有更多的 id,所以最大 id 是可变的
-
不过,我想我只是找到最大值并在此基础上在应用程序代码中生成 10 个随机数