0

我有一个 student_class 表,其中包含以下字段 id、student_id、class、year 我希望在每年之后添加一个包含 id、student_id、class+1、year+1
的新行,用于 class=4 的行以停止添加新行. 我试过这样的东西,但我没有得到我想要的结果

SET GLOBAL event_scheduler = ON;

 CREATE EVENT increment_student_form
 ON SCHEDULE 
 STARTS '2013-03-22 11:45:00'
 EVERY 1 YEAR

 DO 

 $students=array();
 $class=array();
 $stud=select * from student_class where class<4;
        $row=mysql_fetch_array($stud);
    $students[]=$row['student_id'];
    $class[]=$row['class'];
    for($i=0;$i<sizeof($students);$i++){

 INSERT into student class(id,student_id,class,year) values('','$student[i]','$class[i]+1','$year+1') 
 }
4

3 回答 3

0

好的,您的问题完全在 SQL 中。所以你不能在你的 SQL 查询中使用 PHP。查看http://dev.mysql.com/doc/refman/5.1/en/create-event.html了解更多语法选项。
从(从手册中取出)开始:

CREATE EVENT event
ON SCHEDULE
  EVERY 1 YEAR STARTS CURRENT_TIMESTAMP + INTERVAL 1 MINUTE 
COMMENT 'Clears out sessions table each hour.'
DO

这应该可以清除您的语法问题并创建一个每年运行的空事件,并在创建后 1 分钟开始。
从这里我只能假设正确的方式。像这样的东西:

BEGIN
  DECLARE @student INT = 0;
  DECLARE @class INT = 0;
  DECLARE @year INT = 0;
  DECLARE MyCursor CURSOR FOR 
  SELECT student_id, class, year FROM student_class WHERE class < 4;

  OPEN MyCursor;

  FETCH NEXT FROM MyCursor
  INTO @student,@class,@year;
  WHILE  @@FETCH_STATUS = 0
  BEGIN
    SET @year = @year + 1;
    SET @class = @class + 1;
    INSERT into student_class(student_id,class,year) values(@student, @class ,@year ) 
    FETCH NEXT FROM MyCursor INTO @student,@class,@year;
  END
  CLOSE MyCursor;
  DEALLOCATE MyCursor;
END

所以这个 SQL 对我来说是完全未知的,我只是想这可能会给你足够的提示来自己解决你的问题或提出一个新的更具体的问题!祝你好运!

于 2013-04-03T11:23:16.643 回答
0

Use Begin End for event body

DO 
    Begin
    ...
    ...
    END

Edit 1: Also use quotes for select statement

$stud="select * from student_class where class<4";
于 2013-04-03T11:16:15.127 回答
0

我在您的代码中发现了一些错误

  1. 您当前的代码将只获取第一条记录 ..mysql_fetch_array 应该在循环中。
  2. 我在任何地方都看不到 $year 的定义。
  3. 您混合 mysql 事件处理和 php 代码的方式不正确。

尝试使用此代码

 $stud="select * from student_class where class<4";
 while ($row=mysql_fetch_array($stud))
 {
  $sql = "INSERT into student class(id,student_id,class,year) values('','{$row['student_id']}','{$row['class']}','{$row['year']}+1')" ;
  mysql_query($sql);
 }

我会建议你最好在这个 php 脚本上使用 cron 作业而不是 mysql 事件处理。

于 2013-04-03T11:17:15.573 回答