2014-07-11 2 views
1

안녕 나는 또 다른 내 쿼리에 하나 개의 테이블에서 어떤 임의의 값을 삽입하려는 다른 테이블에서 임의의 값을 삽입은 다음과 같습니다MySQL은

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)) 

더 좋은 방법이 있습니까?

답변

3

귀하의 질의가 올바른 것 같습니다. 나는 insert . . . select 함께 작성합니다 : 이것은 하나에 세 개의 무작위로 질문을 넣어 것입니다

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 

: 당신은 세 가지 질문이 다르다는 것을 보장하기 원한다면, 내가 대신이 방법에 갈 수

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); 

중복이없는 행 (id이 에 복사되지 않은 경우)