我有一个包含以下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')
}
答案 0 :(得分:0)
将Begin End
用于活动正文
DO
Begin
...
...
END
编辑1:同时使用select
语句
$stud="select * from student_class where class<4";
答案 1 :(得分:0)
我在你的代码中发现了一些错误
尝试使用此代码
$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对我来说完全不为人知,我猜这可能会给你足够的提示来自己解决问题或者提出一个更具体的新问题! 祝你好运!