MySql。如何组合游标中的多个列?
MySql. How to combine several columns in cursor?
如有任何帮助,我将不胜感激。我的情况..
我和学生有一个table(我只写这个问题的主要专栏):
| Id | Lastname | Firstname |
_____________________________
| 1 | Smith | John |
| 2 | Williams | Robert |
| 3 | Wilson | David |
...
A table 作品:
| Id | Name |
_________________
| 1 | Work1 |
| 2 | Work2 |
...
A table where where write who done this work (可以做同样的工作的学生人数可以是任意的)
| Id | WorkId | StudentId |
___________________________
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 1 |
| 4 | 2 | 2 |
| 5 | 2 | 3 |
...
我需要在过程中创建一个 table( 使用光标 ),如下所示:
| WorkName | Students |
_____________________________________________________
| Work1 | (Smith J., Williams R.) |
| Work2 | (Smith J., Williams R., Wilson D.) |
...
我完全不明白在这种情况下如何使用游标。我的代码:
DELIMITER //
CREATE PROCEDURE Report()
BEGIN
DECLARE students VARCHAR(200);
DECLARE id_s INT;
DECLARE done INT DEFAULT FALSE;
DECLARE get_cur CURSOR FOR
SELECT Id, CONCAT(Lastname, ' ', LEFT(Firstname,1), '. ') FROM students;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
open get_cur;
read_loop: LOOP
FETCH get_cur INTO id_s, students;
IF done THEN
LEAVE read_loop;
END IF;
SELECT w.Name, students
FROM Work w
JOIN WorkStudent ws ON w.Id=ws.WorkId
JOIN Students s ON s.Id = ws.StudentId
WHERE s.Id=id_s;
END LOOP;
CLOSE get_cur;
END //
DELIMITER ;
我解决了我的问题。对于这个决定,我创建了一个新的 table,如果学生现在还不在这个 table 中,我会在这个 table 中插入新行,然后更新这个 table(设置新的学生和逗号)如果学生出现在 table 中。我通过游标做到了这一点。
这是最终的正确决定。现在一切正常。
如有任何帮助,我将不胜感激。我的情况.. 我和学生有一个table(我只写这个问题的主要专栏):
| Id | Lastname | Firstname |
_____________________________
| 1 | Smith | John |
| 2 | Williams | Robert |
| 3 | Wilson | David |
...
A table 作品:
| Id | Name |
_________________
| 1 | Work1 |
| 2 | Work2 |
...
A table where where write who done this work (可以做同样的工作的学生人数可以是任意的)
| Id | WorkId | StudentId |
___________________________
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 1 |
| 4 | 2 | 2 |
| 5 | 2 | 3 |
...
我需要在过程中创建一个 table( 使用光标 ),如下所示:
| WorkName | Students |
_____________________________________________________
| Work1 | (Smith J., Williams R.) |
| Work2 | (Smith J., Williams R., Wilson D.) |
...
我完全不明白在这种情况下如何使用游标。我的代码:
DELIMITER //
CREATE PROCEDURE Report()
BEGIN
DECLARE students VARCHAR(200);
DECLARE id_s INT;
DECLARE done INT DEFAULT FALSE;
DECLARE get_cur CURSOR FOR
SELECT Id, CONCAT(Lastname, ' ', LEFT(Firstname,1), '. ') FROM students;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
open get_cur;
read_loop: LOOP
FETCH get_cur INTO id_s, students;
IF done THEN
LEAVE read_loop;
END IF;
SELECT w.Name, students
FROM Work w
JOIN WorkStudent ws ON w.Id=ws.WorkId
JOIN Students s ON s.Id = ws.StudentId
WHERE s.Id=id_s;
END LOOP;
CLOSE get_cur;
END //
DELIMITER ;
我解决了我的问题。对于这个决定,我创建了一个新的 table,如果学生现在还不在这个 table 中,我会在这个 table 中插入新行,然后更新这个 table(设置新的学生和逗号)如果学生出现在 table 中。我通过游标做到了这一点。 这是最终的正确决定。现在一切正常。