繁体   English   中英

MySQL从另一个表插入随机值

[英]MySQL insert random values from another table

嗨,我想从一个表中插入一些随机值到另一个表,我的查询看起来像这样:

INSERT INTO `rounds`(`matchID`, `questionOneID`, `questionTwoID`, `questionThreeID`) VALUES (17,(SELECT `id` FROM `questions` ORDER BY RAND() LIMIT 3))

问题是,mysql需要4个参数(matchID,questionOneID,...),并且仅获得两个参数(17,(...)),我如何告诉MySql它从SELECT获取3个参数? 我真的必须:

INSERT INTO `rounds`(`matchID`, `questionOneID`, `questionTwoID`, `questionThreeID`) VALUES (17,(SELECT `id` FROM `questions` ORDER BY RAND() LIMIT 1),(SELECT `id` FROM `questions` ORDER BY RAND() LIMIT 1),(SELECT `id` FROM `questions` ORDER BY RAND() LIMIT 1))

或者,还有更好的方法?

您的查询看起来正确。 我会用insert . . . select编写它insert . . . select insert . . . select insert . . . select

INSERT INTO `rounds`(`matchID`, `questionOneID`, `questionTwoID`, `questionThreeID`)
     SELECT 17,
            (SELECT `id` FROM `questions` ORDER BY RAND() LIMIT 1),
            (SELECT `id` FROM `questions` ORDER BY RAND() LIMIT 1),
            (SELECT `id` FROM `questions` ORDER BY RAND() LIMIT 1);

如果您想保证这三个问题有所不同,那么我可以改用这种方法:

INSERT INTO `rounds`(`matchID`, `questionOneID`, `questionTwoID`, `questionThreeID`)
    SELECT 17,
           substring_index(group_concat(id order by rnd), ',', 1),
           substring(substring_index(group_concat(id order by rnd), ',', 2), ',', 11),
           substring_index(group_concat(id order by rnd), ',', -1),
    FROM (SELECT id, rand() as rnd FROM questions ORDER BY RAND() LIMIT 3) q

这会将三个随机问题放在一行上,没有重复项(除非idquestions重复)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM