私は、特別なアイテムであるデータを含むmysqlテーブルを作成しようとしています。 、ITEM2(chanse:1)、項目(チャンス:20%)と ITEM3(チャンス:20):たとえば、私たちはITEM1(1 chanse)持っているなど。など... - チャンスは%テーブルからランダムなアイテムを選択する
でありますだから私は、次の情報を持つテーブルを作成しました:
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 [** How-to-Ask **](http://stackoverflow.com/help/how-to-ask) \t \t [**スタート**] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)質問品質を改善し、より良い回答を得る方法を学ぶことができます。 –
チャンスは何を意味しますか?例えば、1を加算しません。テーブルには何行あり、どれだけ選択されていますか?これはランダムなサブセットかスーパーセットですか? –
5項目をランダムに選択するのは簡単ですが、比率の制限が明確ではありません。 –