Php 使用子查询行作为列的MySQL单次插入

Php 使用子查询行作为列的MySQL单次插入,php,mysql,Php,Mysql,我将如何选择3个问题ID并将它们用作单个insert语句中的列数据,仅使用MySQL 我目前使用以下语句,通过从问题表中选择一个随机条目,将新行插入游戏表: 当前表格: ------------------------------- | game | user_id | question_id | ------------------------------- | 1 | 1 | 10 | INSERT INTO game (user_id, quest

我将如何选择3个问题ID并将它们用作单个insert语句中的列数据,仅使用MySQL

我目前使用以下语句,通过从问题表中选择一个随机条目,将新行插入游戏表:

当前表格:

 -------------------------------
| game | user_id | question_id |
 -------------------------------
| 1    | 1       | 10          |
INSERT INTO game (user_id, question_id)
 SELECT u.id as user_id, q.id as question_id
 FROM user u, question q
 WHERE u.id =:uid
 AND q.category = :category
 ORDER BY RAND()
 LIMIT 1
当前声明:

 -------------------------------
| game | user_id | question_id |
 -------------------------------
| 1    | 1       | 10          |
INSERT INTO game (user_id, question_id)
 SELECT u.id as user_id, q.id as question_id
 FROM user u, question q
 WHERE u.id =:uid
 AND q.category = :category
 ORDER BY RAND()
 LIMIT 1
游戏桌: 我添加了opt_1-3列以允许多选

 -------------------------------------------------------
| game | user_id | question_id | opt_1 | opt_2 | opt_3 |
 -------------------------------------------------------
| 1    | 1       | 10          | 5     | 12    | 80    |
                                 ^       ^       ^
                               alternative wrong answers
我可以通过PHP实现这一点,迭代结果并使用两个查询


我想知道纯粹使用MySQL是否有可能达到同样的效果。

没有做过这么多测试,但这可能会作为您的选择

请注意,order by rand()不是很快,这涉及到几个交叉连接,如果有大量问题,这些交叉连接也可能很慢

SELECT u.id as user_id, Sub1.aid, Sub1.bid, Sub1.cid
FROM user u, 
(SELECT a.id AS aid, b.id AS bid, c.id AS cid
FROM question a, question b, question c
WHERE a.category = :category
AND a.category = :category
AND a.category = :category
AND a.id != b.id
AND a.id != c.id
AND b.id != c.id
ORDER BY RAND()
LIMIT 1) Sub1
WHERE u.id =:uid

成功了!我一整天都在尝试这样的陈述,但我不能完全理解它,而且从来没有像预期的那样工作。(甚至开始研究pivots!:/)我已经读了一些关于RAND()速度慢以及如何优化它的内容,但是在我构建和测试它的时候,现在就足够了。谢谢:)很乐意帮忙。像这样的事情让我想了想。