MySQL存储过程循环
所以我需要从两个不同的表中提取两个id字段,并将它们插入到第三个表中。这是为了权限,所以基本上我需要获取admin表的id并循环,直到所有构建表的id都被填充到第三个名为building_user的表中。这是启动权限表,所以我需要每个建筑ID与每个管理员ID匹配 这就是我正在尝试的,我不太明白,但我知道我错过了一些东西MySQL存储过程循环,mysql,Mysql,所以我需要从两个不同的表中提取两个id字段,并将它们插入到第三个表中。这是为了权限,所以基本上我需要获取admin表的id并循环,直到所有构建表的id都被填充到第三个名为building_user的表中。这是启动权限表,所以我需要每个建筑ID与每个管理员ID匹配 这就是我正在尝试的,我不太明白,但我知道我错过了一些东西 CREATE PROCEDURE buildingUserAssignment() BEGIN DECLARE done INT DEFAULT 0; DECLARE d
CREATE PROCEDURE buildingUserAssignment()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE done2 INT DEFAULT 0;
DECLARE a, b INT;
DECLARE admin CURSOR
FOR
SELECT id FROM admin;
DECLARE building CURSOR
FOR
SELECT id FROM building;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
OPEN admin;
OPEN building;
REPEAT
FETCH admin into a;
REPEAT
FETCH building into b;
INSERT INTO building_user VALUES (a,b);
UNTIL done END REPEAT;
UNTIL done END REPEAT;
CLOSE admin;
CLOSE building;
END;
我最终只得到一个管理员ID字段ID 2,即使有一个ID 1。以下是示例数据库:
管理员:
建筑:
调用buildingUserAssignment的当前最终结果:
SELECT * FROM building_user:
user_id building_id
2 0
2 1
2 2
2 3
2 4
2 4
3 4
5 4
6 4
7 4
9 4
11 4
因此building_user表最终应该是这样的,当然对每个管理员id重复:
1 0
1 1
1 3
1 6
1 7
1 8
1 10
我肯定这是件愚蠢的事情,但我想我已经看太久了,现在我被卡住了。我甚至可能不是最好的方法,所以我欢迎任何建议。您不需要使用循环。有一种称为的联接类型,它根据第一个表的行数乘以第二个表的行数生成结果集。并且生成的行将被插入到insert into..SELECT语法中
在这方面使用循环是毫无意义的。不管怎样,这个问题令人困惑。。。管理员与建筑的关系如何?这是为了启动权限表,所以我需要每个建筑ID与每个管理员ID匹配。选择进入建筑用户用户ID、建筑交叉用户ID或类似的内容。天哪,这大约容易200万倍!我不太会直接和DB打交道,所以我不知道这件事。我本来可以用PHP编写一些东西,但我想直接在DB中编写,因为我认为最好从那里开始编写。再次感谢!
SELECT * FROM building_user:
user_id building_id
2 0
2 1
2 2
2 3
2 4
2 4
3 4
5 4
6 4
7 4
9 4
11 4
1 0
1 1
1 3
1 6
1 7
1 8
1 10
INSERT INTO building_user
SELECT a.id, b.id
FROM admin a CROSS JOIN building_user b