Мне нужно закончить это таким образом, чтобы, когда бы ни импортировался студенческий класс и имел связанный раздел, ему приходилось соответствовать его определенному разряду.
DROP PROCEDURE IF EXISTS sp_test;
Delimiter $$
CREATE PROCEDURE sp_Student_Classs1()
BEGIN
DECLARE done, doneX int default 0;
DECLARE var_Student_Class_IDX, var_importedX, var_SectionX, var_form_idX, rnX int; -- curX variables;
DECLARE var_Student varchar(255);
DECLARE curA CURSOR FOR select Student_id from temp_Students;
DECLARE continue handler FOR NOT FOUND SET done = 1;
Open curA;
WHILE (done = 0) do -- curA while
FETCH NEXT FROM curA INTO var_Student;
if done = 0 then -- curA if
drop table if exists temp_table;
set @create_imported = concat('create table temp_table (select pp.Student_Class_ID, usi.imported, usi.Section, usi.form_id, pp.last_update_date, ''null'' as rn ',
' from Student_Classs pp left join ui_sections usi on usi.Instance_ID = pp.Student_Class_ID where pp.Student_ID = ', var_Student, ' order by pp.last_update_date)' );
select @create_imported; PREPARE stmt_name FROM @create_imported; EXECUTE Stmt_name; DEALLOCATE prepare stmt_name;
begin
declare curX CURSOR FOR select Student_Class_ID, imported, Section, form_id, rn from temp_table;
DECLARE continue handler FOR NOT FOUND SET doneX = 1;
open CurX;
set doneX = 0; set @rn = 1;
while (doneX = 0) do
FETCH NEXT FROM curX into var_Student_Class_IDX, var_importedX, var_SectionX, var_form_idX, rnX;
if doneX = 0 then
if (var_imported in (select SectionID from temp_table)) or (var_Section_X in (select imported from temp_table))
then
set @insertX = concat('update temp_table set rn = ', @rn, ' where Student_Class_ID = ',var_Student_Class_IDX); select @insertX;
PREPARE stmt_name FROM @insertX; EXECUTE Stmt_name; DEALLOCATE prepare stmt_name;
else
set @rn = @rn+1;
set @insertX = concat('update temp_table set rn = ', @rn, ' where Student_Class_ID = ',var_Student_Class_IDX); select @insertX;
end if;
end if;
end while;
close CurX;
end;
Я могу получить первыйПозиция 1 для первых 3 строк, но затем она увеличивается как 2,3, но она должна просто оставаться на уровне 2,2,2.В зависимости от того, что я могу получить эту логику правильно?
Результат должен выглядеть следующим образом:
Section Imported Student_Class Student form Rank
720 (null) 630 111 4 1
935 493 584 111 5 1
493 720 733 111 6 1
38 6 988 111 4 2
6 (null) 986 111 3 2
459 38 531 111 2 2
265 (null) 704 25 3 1
547 (null) 692 25 1 2
Можете ли вы помочь мне с этим?