[英]MySQL INSERT query getting values from another table including a variable
[英]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
這會將三個隨機問題放在一行上,沒有重復項(除非id
在questions
重復)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.