php - 如何使用限制和某种分数选择随机行?

标签 php mysql

我必须在有几行的地方进行 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

Demo on dbfiddle

关于php - 如何使用限制和某种分数选择随机行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54545412/

相关文章:

php - 从好友列表和关注列表中获取用户

mysql - Android Studio 与 MySQL - SharedPreferences?

MySQL来自同一张表的两个外键

php - 在特定ID之后搜索mysql表

php - 有人可以告诉我如何让成员使用 PHP 将自己的标签添加到问题中吗?

javascript - 模板上动态添加的内容不响应 CodeIgniter 中的 Javascript/AJAX/Jquery

mysql - 将数据表从 MySQL 导出到没有分隔符的文本文件

php - Kohana PHP 的绝对初学者可以去哪里学习如何从头开始使用它?

php - 带有 mt_rand 的 Var_Dump

mysql - SQL 可以在查询中加入和验证吗?