Php 从带有比率的表中选择随机项
我试图创建一个mysql表,其中包含一些特殊的数据项。例如,我们有项目1(机会:1)、项目2(机会:1)、项目(机会:20%)和 项目3(机会:20)等。。等 -机会在% 因此,我创建了一个包含以下信息的表:Php 从带有比率的表中选择随机项,php,mysql,sql,Php,Mysql,Sql,我试图创建一个mysql表,其中包含一些特殊的数据项。例如,我们有项目1(机会:1)、项目2(机会:1)、项目(机会:20%)和 项目3(机会:20)等。。等 -机会在% 因此,我创建了一个包含以下信息的表: CREATE TABLE `special_items` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `item_id` int(11) NOT NULL, `item_name` varchar(255) DEFAULT
CREATE TABLE `special_items` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`item_id` int(11) NOT NULL,
`item_name` varchar(255) DEFAULT NULL,
`item_type` enum('SPECIAL','SILVER','BRONZE','GOLD') NOT NULL DEFAULT 'BRONZE',
`item_ratio` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`) USING BTREE,
UNIQUE KEY `item` (`item_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of special_items
-- ----------------------------
INSERT INTO `special_items` VALUES ('1', '200', 'special_name1', 'BRONZE', '80');
INSERT INTO `special_items` VALUES ('2', '204', 'special_name2', 'BRONZE', '4');
INSERT INTO `special_items` VALUES ('3', '875', 'special_name3', 'BRONZE', '80');
INSERT INTO `special_items` VALUES ('4', '900', 'special_name4', 'BRONZE', '60');
INSERT INTO `special_items` VALUES ('5', '901', 'special_name5', 'SILVER', '90');
INSERT INTO `special_items` VALUES ('6', '968', 'special_name6', 'BRONZE', '65');
INSERT INTO `special_items` VALUES ('7', '777', 'special_name7', 'BRONZE', '30');
我们现在要做的是从800行中按比例选择5个随机项目。因此,它需要具备以下要求:
- 总是随机的行
- 按比例选择行(例如,表中的概率为百分比)
select si.*
from (select si.*, rand() * item_ratio as weight
from special_items si
) si
order by weight desc
limit 5;
注意:需要子查询,因此每行只计算一次权重。我认为这也是同样的道理:
select si.*, rand() * item_ratio as weight
from special_items si
order by weight desc
limit 5;
但MySQL可能很特别。向我们展示示例数据和预期输出。请阅读,这里是一个学习如何提高问题质量和获得更好答案的好地方。机会意味着什么?例如,它们加起来不等于1。表中有多少行,选择了多少行?这是一个随机子集还是超集?随机选择5个项目很容易,但比率限制不明确。数据库中将有800个项目,它们都有一个百分比概率比率。选择时,将始终选择5行,并基于以百分比表示的变化。这是什么<代码>机会比率代码>?机会如何影响选择?请给我们一个例子。它需要如何工作的例子:项目1-获得此行的几率1%项目2-获得此行的几率3%项目3-获得此行的几率20%项目4-获得此行的几率25%项目5-获得此行的几率90%项目6-获得此行的几率25%限制条件是,根据随机选择和获得该行的机会,始终获得5行@Gordon LinoffI使用了函数RAND(),因为我不知道函数random会带来什么?你能解释一下吗?解释:一种简单的算法,它允许选择随机行,并考虑所谓的权重值,因此根据此权重值,某些行的选择频率将高于其他行。
select si.*, rand() * item_ratio as weight
from special_items si
order by weight desc
limit 5;