我正在尝试创建一个mysql表格,其中包含一些特殊项目的数据。例如,我们有条1/1(chanse:1),ITEM2(chanse: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 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 item_name
FROM special_items AS r1 JOIN
(SELECT CEIL(RAND() *
(SELECT MAX(id)
FROM special_items)) AS id)
AS r2
WHERE r1.id >= r2.id
ORDER BY r1.id ASC
LIMIT 5
如果这可以通过PHP来完成,那就太棒了。
我愿意接受任何和所有的建议。在此期间,我也会尝试自己弄清楚这一点,但我仍然陷入困境。
向我们展示示例数据和预期输出。 \t请阅读[**如何提问**](http://stackoverflow.com/help/how-to-ask) \t \t这里是一个伟大的地方[** START **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)来了解如何提高您的问题质量并获得更好的答案。 –
机会是什么意思?例如,它们的总和不等于1。你在桌上有多少排,有多少人被选中?这是一个随机的子集或超集? –
随机选择5个项目很容易,但比例限制并不明确。 –