我正在使用MySQL 5.2.42 CE
。
我有一个表格,其中有一个名为"organization_id"
的列。它包含不同行的一些重复值,意味着该字段中的多个行可以具有"org1"
值。
现在我必须遍历该列的不同值,意味着不同的组织。
但我不知道是否有For-Each loop in mysql
。
我这样做了:
Select Distinct organization_id From tbl_organization
这让我回到了所有不同的组织。现在,我如何遍历列表并访问每个organization_id?我在DB的触发器中写这个。 请帮忙。
谢谢&问候, Surodip Patra
答案 0 :(得分:3)
您必须使用CURSORS
。
使用游标,将获取的id读入局部变量,并根据组织ID执行其他条件操作。
...
DECLARE cur_orgs CURSOR FOR
SELECT DISTINCT organization_id FROM tbl_organization;
...
OPEN cur_orgs;
...
Reading_Orgs: LOOP
FETCH cur_orgs INTO _org_id;
...
IF done THEN
LEAVE Reading_Orgs;
END IF;
IF ... THEN
...
ELSE
...
END IF;
END LOOP;
CLOSE cur_orgs;
...
...
答案 1 :(得分:1)
如果我理解正确的话
您可以在触发器中使用 CURSOR 。
ursor用于遍历由查询返回的一组行,并处理单个行。目前,所有版本都大于5.x,MySQL游标具有以下属性:
MySQL支持以下用于处理游标的语句。
首先,您必须使用DECLARE语句声明游标:
DECLARE cursor_name CURSOR FOR SELECT_statement;
其次,你必须使用OPEN语句打开游标。在从中获取行之前必须先打开游标。
OPEN cursor_name;
接下来,您可以从游标中检索下一行,并使用FETCH语句将游标移动到结果集中的下一行。
FETCH cursor_name INTO variable list;
最后,您必须关闭光标以停用它并释放与该光标关联的内存。要关闭游标,请使用CLOSE语句:
CLOSE cursor_name;
并使用循环获取mysql变量中列的值。
您可以查看更多详细信息和一个关于如何使用光标的好教程。 http://www.mysqltutorial.org/mysql-cursor/
答案 2 :(得分:0)
我在所有人给出的答案的帮助下完成了我的任务。 我的SQL如下:
CREATE DEFINER=`root`@`%` PROCEDURE `test_report`()
BEGIN
DECLARE _id varchar(20);
DECLARE done int;
DECLARE cur_report cursor for
Select distinct id From my_report_table;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
SET @start_date = DATE_FORMAT(CURDATE(), '%Y-%m-01'); # first date of month
SET @end_date = LAST_DAY(CURDATE()); #last date of month
open cur_report;
reading_reports: LOOP
Fetch cur_report INTO _id;
IF done = 1 THEN
LEAVE reading_orgs;
END IF;
Insert into my_table(id,creation_date,start_date,end_date) Values(_id,CURDATE(),@start_date,@end_date);
END LOOP;
end