我必须在有几行的地方进行 sql 查询。它仅在同一个表中。
结果(1 行或多行)必须是随机的,并且遵循从 0 到 ...(任何大数字,如 5000)的点系统。
例如,从这个数据转储中,我想随机选择 X 个名称并遵循这些点。
选择 3 行的结果可能是 ids:
10、6 和 4
或 6、10、4
如果是 4 行,结果将是:
10、6、4、9
或
6、10、4、9
CREATE TABLE `draw` (
`id` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
`points` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `draw` (`id`, `name`, `points`) VALUES (1, 'a', '65');
INSERT INTO `draw` (`id`, `name`, `points`) VALUES (2, 'b', '5000');
INSERT INTO `draw` (`id`, `name`, `points`) VALUES (3, 'c', '900');
INSERT INTO `draw` (`id`, `name`, `points`) VALUES (4, 'd', '10');
INSERT INTO `draw` (`id`, `name`, `points`) VALUES (5, 'e', '1000');
INSERT INTO `draw` (`id`, `name`, `points`) VALUES (6, 'f', '0');
INSERT INTO `draw` (`id`, `name`, `points`) VALUES (7, 'g', '650');
INSERT INTO `draw` (`id`, `name`, `points`) VALUES (8, 'h', '600');
INSERT INTO `draw` (`id`, `name`, `points`) VALUES (9, 'i', 30');
INSERT INTO `draw` (`id`, `name`, `points`) VALUES (10, 'j', '0');
最佳答案
您需要首先根据点SELECT
行,然后通过将其用作子查询以随机顺序从该结果中进行选择。如果多个用户具有相同的点数,为了确保我们不会总是选择同一个用户,我们还按 RAND()
after points< 对子查询进行排序
:
SELECT *
FROM (SELECT *
FROM draw
ORDER BY points, RAND()
LIMIT 4) d
ORDER BY RAND()
输出:
id name points
9 i 30
10 j 0
6 f 0
4 d 10
关于php - 如何使用限制和某种分数选择随机行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54545412/