php - MySQL从另一个表插入随机值

标签 php mysql sql database sqlite

您好,我想将一些随机值从一个表插入到另一个表中,我的查询如下所示:

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 来编写它。 。 。选择:

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

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

关于php - MySQL从另一个表插入随机值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24701360/

相关文章:

php - Google youtube PHP API返回无效的上传请求

SQL:如何将 Oracle 表中的 100,000 条记录分成 5 个 block ?

php - Laravel Eloquent 地计算关系

php - 使用 php 使用 session 从 sql 表中提取数据

mysql - 是否可以在 mysql 中使用 "Index"作为列名

php - 如何使用存储过程的字符串 id 插入多条记录?

mysql - 如何使用 SQL 语句重命名 AzerothCore 上的 Warlock Minions?

sql - 避免在具有多个条件的 If 语句中进行硬编码

php - 如何使用 PHP Mysql 创建总账/T 型账户

php - SQL 循环不会打印列名