我必须在其中有几行的地方进行sql查询。它只在同一张表中。
结果(1行或更多行)必须是随机的,并且遵循从0到...(任何大数,例如5000)的点系统。
例如,从此数据转储中,我想随机选择X个名称并遵循这些点。
选择3行的结果可能是ID:
10、6和4
或6、10、4
如果是4行,结果将是:
10,6,4,9
OR
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');
答案 0 :(得分:2)
首先需要SELECT
行基于点的行,然后将其用作子查询,然后以随机顺序从结果中进行选择。为了确保如果多个用户具有相同的分数,我们不会总是选择同一用户,我们还通过RAND()
之后 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