在执行此过程时,使用mysql 5.7:
arr_idx = np.concatenate((np.zeros(shape=(2, 1), dtype=bool), arr_idx), axis=1)
>>> arr_idx
array([[False, False, True],
[False, True, False]])
我明白了
mysql>调用tres();
查询正常,受影响的0行(3.49秒)
但是,当我对循环范围内的某些值执行INSERT时:
DELIMITER $$
CREATE PROCEDURE tres()
BEGIN
DECLARE maxid INT;
DECLARE x INT;
SET maxid = 655;
SET x=1;
WHILE x<= maxid DO
INSERT INTO `forum_topicresponder` (topic_id, username, reply_id) SELECT p.topic_id, p.creator_name, p.id FROM forum_post AS p WHERE p.topic_id=x;
SET x = x + 1;
END WHILE;
END$$
我看到结果插入没有问题。
表模式:
INSERT INTO `forum_topicresponder` (topic_id, username, reply_id) SELECT p.topic_id, p.creator_name, p.id FROM forum_post AS p WHERE p.topic_id=42;
和
CREATE TABLE `forum_topicresponder` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`topic_id` int(10) NOT NULL DEFAULT '0',
`username` varchar(300) CHARACTER SET utf8mb4 NOT NULL DEFAULT 'na',
`reply_id` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=94 DEFAULT CHARSET=latin1;
那么这里可能出什么问题了,我该如何解决?
答案 0 :(得分:1)
您需要在过程中检查x的值,该值可能与forum_post表的topic_id不匹配。
如果topic_id不匹配,则没有数据将复制到forum_topicresponder表。
您需要设置x的正确值(从最小到最大)取决于forum_post表的topic_id
答案 1 :(得分:0)
为什么要为此使用循环?只要做:
INSERT INTO `forum_topicresponder` (topic_id, username, reply_id)
SELECT p.topic_id, p.creator_name, p.id
FROM forum_post p
WHERE p.topic_id <= 665; -- or use a variable if you prefer