next up previous contents
Next: CSS 顯示樣版 Up: 匯入優化 Previous: MySQL 匯入判斷   Contents

MySQL 匯入更新

  1. 重新匯入時雖已進行判斷,不會重複匯入,但若系統已開始使用,重新匯入時,有部分資料表會被更新回原始狀態,故再加入規則不要更新已不是原始設定的欄位。例如:課程匯入時,第 0 週預設「課程說明」及「預設點名」兩個活動,若老師已在第 0 週加入活動,將被清除,故加入此判斷。
    /usr/bin/mysql -uroot -prootpw << EOF
    use moodle23;
    update mdl_course_sections set sequence=@cmod where course="$id" and section='0' AND sequence='';
    EOF
    
  2. mdl_course_sections, section='0' 中的 sequence,記錄各活動的 id。必須將原活動在 mdl_course_modules 上的 id,重新加入 sequence 中,且清除 mdl_course 中的 cache 欄位 sectioncache='' and modinfo='',才會生效。
    /usr/bin/mysql -uroot -prootpw << EOF
    use moodle23;
    update mdl_course set sectioncache='' and modinfo='' where id="$id";
    EOF
    
  3. 重新匯入時雖已進行判斷,不會重複匯入,但若系統已開始使用,重新匯入時,有部分資料表會被更新回原始狀態,故再加入規則不要更新已不是原始設定的欄位。例如:課程匯入時,第 0 週預設「課程說明」及「預設點名」兩個活動,若老師已在第 0 週加入活動,將被清除,故加入此判斷。
    /usr/bin/mysql -uroot -prootpw << EOF
    use moodle23;
    update mdl_course_sections set sequence=@cmod where course="$id" and section='0' AND sequence='';
    EOF
    
  4. 預設點名,每筆重新匯入會先判斷該時段是否已設定,若已設定則不再匯入。
    /usr/bin/mysql -uroot -prootpw << EOF
    use moodle23;
    set @att=(select id from mdl_attforblock where course="$id" 
    and name=%*"預設點名"*) and grade=100);
    INSERT INTO mdl_attendance_sessions (attendanceid,sessdate,
    duration,timemodified,descriptionformat) 
    SELECT @att,"${st}","$duration","$timecreated",'1' FROM DUAL
    WHERE @att IS NOT NULL AND NOT EXISTS 
    (SELECT id FROM mdl_attendance_sessions 
    WHERE attendanceid=@att and sessdate="${st}") LIMIT 1;
    EOF
    
  5. 每門課預設點名匯入或更新完後,全部刪除不在新設定時段的點名,也就是舊的或錯的點名時段。
    /usr/bin/mysql -uroot -prootpw << EOF
    use moodle23;
    set @att=(select id from mdl_attforblock where course="$id" and 
    name=%*"預設點名"*) and grade=100);
    delete FROM mdl_attendance_sessions WHERE attendanceid=@att and 
    sessdate NOT IN ($atime) AND lasttaken IS NULL;
    EOF
    


2017-08-04