1

これはコピーする私のmysqlデータです

表「質問」

id|question_text  |priority|quiz_id|
1 |<p>Letter D</p>|   1    |    1  |
2 |<p>Letter B</p>|   2    |    1  |
3 |<p>Letter C</p>|   3    |    1  |

次に、これが私の新しいテーブルです。すでに2つの質問テーブル「testbank_question」があります

id|question_id|question_text  |priority|quiz_id|
89|        1  |<p>Letter A</p>|   1    |    1  |
90|        2  |<p>Letter B</p>|   2    |    1  |

更新すると、新しいテーブル「testbank_question」で結果が次のようになります

id |question_id|question_text  |priority|quiz_id|
89 |        1  |<p>Letter D</p>|   1    |   1  |
90 |        2  |<p>Letter B</p>|   2    |   1  |
150|        3  |<p>Letter C</p>|   3    |   1  |

--table 'questions' create statemate

CREATE TABLE IF NOT EXISTS `questions` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `question_text` varchar(3800) DEFAULT NULL,
  `question_type_id` int(11) NOT NULL,
  `priority` int(11) NOT NULL,
  `quiz_id` int(11) NOT NULL,
  `point` decimal(18,0) NOT NULL,
  `added_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `parent_id` int(11) NOT NULL,
  `question_total` decimal(18,0) DEFAULT NULL,
  `check_total` int(11) DEFAULT NULL,
  `header_text` varchar(1500) CHARACTER SET utf8 DEFAULT NULL,
  `footer_text` varchar(1500) CHARACTER SET utf8 DEFAULT NULL,
  `question_text_eng` varchar(1800) CHARACTER SET utf8 DEFAULT NULL,
  `help_image` varchar(550) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `quiz_id` (`quiz_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;


INSERT INTO `questions` (`id`, `question_text`, `question_type_id`, `priority`, `quiz_id`, `point`, `added_date`, `parent_id`, `question_total`, `check_total`, `header_text`, `footer_text`, `question_text_eng`, `help_image`) VALUES
(1, '<p>\r\n    Letter A</p>', 1, 1, 1, 1, '2013-03-06 09:12:58', 0, NULL, NULL, '', '', NULL, NULL),
(2, '<p>\r\n    Letter B</p>', 1, 2, 1, 1, '2013-03-06 09:13:21', 0, NULL, NULL, '', '', NULL, NULL),
(3, '<p>\r\n    letter C</p>', 1, 3, 1, 1, '2013-03-06 13:43:48', 0, NULL, NULL, '', '', NULL, NULL);

ALTER TABLE `questions`
  ADD CONSTRAINT `questions_ibfk_1` FOREIGN KEY (`quiz_id`) REFERENCES `quizzes` (`id`) ON DELETE CASCADE;

--

-- テーブルのテーブル構造testbank_question

CREATE TABLE IF NOT EXISTS `testbank_question` (
  ` id` int(100) NOT NULL AUTO_INCREMENT,
  `question_id` int(100) NOT NULL,
  `question_text` varchar(3800) NOT NULL,
  `question_type_id` int(11) NOT NULL,
  `priority` int(11) NOT NULL,
  `quiz_id` int(11) NOT NULL,
  `point` decimal(18,0) NOT NULL,
  `added_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `parent_id` int(11) NOT NULL,
  `question_total` decimal(18,0) NOT NULL,
  `check_total` int(11) NOT NULL,
  `header_text` varchar(1500) NOT NULL,
  `footer_text` varchar(1500) NOT NULL,
  `question_text_eng` varchar(1800) NOT NULL,
  `help_image` varchar(550) NOT NULL,
  PRIMARY KEY (` id`),
  KEY `quiz_id` (`quiz_id`),
  KEY `question_id` (`question_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=176 ;

--

-- テーブルのデータをダンプしていますtestbank_question

INSERT INTO `testbank_question` (` id`, `question_id`, `question_text`, `question_type_id`, `priority`, `quiz_id`, `point`, `added_date`, `parent_id`, `question_total`, `check_total`, `header_text`, `footer_text`, `question_text_eng`, `help_image`) VALUES
(89, 1, '<p>\r\n    Letter A</p>', 1, 1, 1, 1, '2013-03-06 09:12:58', 0, 0, 0, '', '', '', ''),
(90, 2, '<p>\r\n    Letter B</p>', 1, 2, 1, 1, '2013-03-06 09:13:21', 0, 0, 0, '', '', '', '');

--

-- テーブルの制約testbank_question

ALTER TABLE `testbank_question`
  ADD CONSTRAINT `testbank_question_ibfk_1` FOREIGN KEY (`quiz_id`) REFERENCES `testbank_quizzes` (`copy_id`) ON DELETE CASCADE;

私の新しいテーブルでは、フィールド question_id は、コピーするデータの ID と同じです。これはPHPでの私のコードです

INSERT INTO testbank_question
        (question_id,
         quiz_id,
         question_text,
         question_type_id,
         priority,point,
         added_date,
         parent_id,
         question_total,
         check_total,
         header_text,
         footer_text,
         question_text_eng,
         help_image) 
  SELECT         id,
         quiz_id,
         question_text,
         question_type_id,
         priority,
         point,
         added_date,
         parent_id,
         question_total,
         check_total,
         header_text,
         footer_text
         ,question_text_eng,
         help_image 
  FROM questions WHERE
        questions.quiz_id='1' ON DUPLICATE KEY UPDATE
     testbank_question.question_id = VALUES(testbank_question.question_id)
4

1 に答える 1

0

テーブルの作成ステートメントを投稿する必要がありますが、ON UPDATE構文を誤解しているようです。

更新時では、どの列がどの列に見えるかを明示的に設定する必要がありquestion_textます。UNIQUEまた、制約に使用する必要がある列を設定する必要があります。

CREATE TABLE IF NOT EXISTS new_schema.questions (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `question_text` varchar(3800) DEFAULT NULL,
  `question_type_id` int(11) NOT NULL,
  `priority` int(11) NOT NULL,
  `quiz_id` int(11) NOT NULL,
  `point` decimal(18,0) NOT NULL,
  `added_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `parent_id` int(11) NOT NULL,
  `question_total` decimal(18,0) DEFAULT NULL,
  `check_total` int(11) DEFAULT NULL,
  `header_text` varchar(1500) CHARACTER SET utf8 DEFAULT NULL,
  `footer_text` varchar(1500) CHARACTER SET utf8 DEFAULT NULL,
  `question_text_eng` varchar(1800) CHARACTER SET utf8 DEFAULT NULL,
  `help_image` varchar(550) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `quiz_id` (`quiz_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;



CREATE TABLE `testbank_question` (
  `id` int(100) NOT NULL AUTO_INCREMENT,
  `question_id` int(100) NOT NULL,
  `question_text` varchar(3800) NOT NULL,
  `question_type_id` int(11) NOT NULL,
  `priority` int(11) NOT NULL,
  `quiz_id` int(11) NOT NULL,
  `point` decimal(18,0) NOT NULL,
  `added_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `parent_id` int(11) NOT NULL,
  `question_total` decimal(18,0) NOT NULL,
  `check_total` int(11) NOT NULL,
  `header_text` varchar(1500) NOT NULL,
  `footer_text` varchar(1500) NOT NULL,
  `question_text_eng` varchar(1800) NOT NULL,
  `help_image` varchar(550) NOT NULL,
  PRIMARY KEY (` id`),
  UNIQUE KEY `unique_quizID_priority` (`quiz_id`,`priority`),
  KEY `quiz_id` (`quiz_id`),
  KEY `question_id` (`question_id`)
) ENGINE=InnoDB AUTO_INCREMENT=180 DEFAULT CHARSET=latin1;





iNSERT INTO new_schema.questions ( `question_text`, `question_type_id`, `priority`, `quiz_id`, `point`, `added_date`, `parent_id`, `question_total`, `check_total`, `header_text`, `footer_text`, `question_text_eng`, `help_image`) VALUES
(' Letter A', 1, 1, 1, 1, '2013-03-06 09:12:58', 0, NULL, NULL, '', '', NULL, NULL),
(' Letter B', 1, 2, 1, 1, '2013-03-06 09:13:21', 0, NULL, NULL, '', '', NULL, NULL),
('letter C', 1, 3, 1, 1, '2013-03-06 13:43:48', 0, NULL, NULL, '', '', NULL, NULL);




INSERT INTO testbank_question
        (question_id,
         quiz_id,
         question_text,
         question_type_id,
         priority,point,
         added_date,
         parent_id,
         question_total,
         check_total,
         header_text,
         footer_text,
         question_text_eng,
         help_image) 
  SELECT         id,
         quiz_id,
         question_text,
         question_type_id,
         priority,
         point,
         added_date,
         parent_id,
         question_total,
         check_total,
         header_text,
         footer_text
         ,question_text_eng,
         help_image 
  FROM questions 
WHERE
        questions.quiz_id='1' 
ON DUPLICATE KEY UPDATE
     testbank_question.question_text = questions.question_text;



iNSERT INTO new_schema.questions ( `question_text`, `question_type_id`, `priority`, `quiz_id`, `point`, `added_date`, `parent_id`, `question_total`, `check_total`, `header_text`, `footer_text`, `question_text_eng`, `help_image`) VALUES
( 'Letter D', 1, 1, 1, 1, '2013-03-06 09:12:58', 0, NULL, NULL, '', '', NULL, NULL),
( 'Letter E', 1, 2, 1, 1, '2013-03-06 09:13:21', 0, NULL, NULL, '', '', NULL, NULL),
( 'letter F', 1, 3, 1, 1, '2013-03-06 13:43:48', 0, NULL, NULL, '', '', NULL, NULL);



INSERT INTO testbank_question
        (question_id,
         quiz_id,
         question_text,
         question_type_id,
         priority,point,
         added_date,
         parent_id,
         question_total,
         check_total,
         header_text,
         footer_text,
         question_text_eng,
         help_image) 
  SELECT         id,
         quiz_id,
         question_text,
         question_type_id,
         priority,
         point,
         added_date,
         parent_id,
         question_total,
         check_total,
         header_text,
         footer_text
         ,question_text_eng,
         help_image 
  FROM questions 
WHERE
        questions.quiz_id='1' 
ON DUPLICATE KEY UPDATE
     testbank_question.question_text = questions.question_text;


select * from new_schema.testbank_question;

出力: " id",question_id,question_text,question_type_id,priority,quiz_id,point,added_date,parent_id,question_total,check_total,header_text,footer_text,question_text_eng,help_image 182,22," Letter D",1,1,1,1 ,"2013-03-08 01:11:36",0,0,0,,,, 183,23," 文字 E",1,2,1,1,"2013-03-08 01:11: 36",0,0,0,,,,184,24,"文字 F",1,3,1,1,"2013-03-08 01:11:36",0,0,0,,, 、

テキストが上書きされたことを示しています。他の列を更新する場合ON UPDATEは、クエリの部分でそれらを設定する必要があります。

また、(ほとんど) 自動インクリメント値をテーブルに挿入するべきではありません。MySQL に任せてください。また、testbank_question テーブルの「id」にスペース タイプがあります。

于 2013-03-07T03:54:25.780 に答える