每年在mysql中用条件添加行

时间:2013-04-03 11:02:03

标签: php mysql

我有一个包含以下fieds的student_class表 ID,student_id数据,类,年 我想在每年之后添加一个包含的新行 的 ID,student_id数据,类+ 1,年+ 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') 
 }

3 个答案:

答案 0 :(得分:0)

Begin End用于活动正文

DO 
    Begin
    ...
    ...
    END

编辑1:同时使用select语句

的引号
$stud="select * from student_class where class<4";

答案 1 :(得分:0)

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

  1. 您当前的代码只会获取第一条记录..mysql_fetch_array shold in循环。
  2. 我无法在任何地方看到$ year。
  3. 你混合mysql事件处理和php代码的方式不正确。
  4. 尝试使用此代码

     $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脚本上使用crone job而不是mysql事件处理。

答案 2 :(得分: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对我来说完全不为人知,我猜这可能会给你足够的提示来自己解决问题或者提出一个更具体的新问题! 祝你好运!