Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL存储过程循环_Mysql - Fatal编程技术网

MySQL存储过程循环

MySQL存储过程循环,mysql,Mysql,所以我需要从两个不同的表中提取两个id字段,并将它们插入到第三个表中。这是为了权限,所以基本上我需要获取admin表的id并循环,直到所有构建表的id都被填充到第三个名为building_user的表中。这是启动权限表,所以我需要每个建筑ID与每个管理员ID匹配 这就是我正在尝试的,我不太明白,但我知道我错过了一些东西 CREATE PROCEDURE buildingUserAssignment() BEGIN DECLARE done INT DEFAULT 0; DECLARE d

所以我需要从两个不同的表中提取两个id字段,并将它们插入到第三个表中。这是为了权限,所以基本上我需要获取admin表的id并循环,直到所有构建表的id都被填充到第三个名为building_user的表中。这是启动权限表,所以我需要每个建筑ID与每个管理员ID匹配

这就是我正在尝试的,我不太明白,但我知道我错过了一些东西

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