2012-06-26 98 views
1

我有表插入和更新

table1 
**************************** 
id | start_date | end_date 
1 30/06/2012 01/01/9999 

当我插入新行

id | start_date | end_date 
1 30/06/2012 26/06/2012 <- Now it is the start date of the next row2 
2 26/06/2012 01/01/9999 

插入行的开始日期将成为前一行的结束日期等等。

$sql = "INSERT INTO 
        table1(cate_id,task_id,obj,end_date,start_date,line) 
        SELECT 
         $cate_id , 
         $task_id, 
         $obj, 
         '2011-02-28', -> this what I am trying to do 
         '9999-01-01', -> this what I am trying to do 
         line1 
        FROM 
         line_task 
        WHERE 
         line_task_id = (
              SELECT 
               line_task_id 
              FROM 
               task 
              WHERE 
               task_id = 2 
              )"; 

当我试图这样的事情:

insert into table1(cate_id,task_id,obj, start_date, end_date,line) 
values (4,3,23, (Select max(end_date) from table1),end_date,'value_line'); 

我得到消息:

Error code 1093, SQL state HY000: You can't specify target table 'table1' for update  in FROM clause 
Line 1, column 1 

执行后0秒完成,1个错误发生

能告诉我怎么能用mysql做到这一点? 感谢

回答

1

试试这个::

Set @max_date = Select max(end_date) from table; 

    Insert into table(id, start_date, end_date) values (id, @max_date ,end_date); 
+0

错误代码1093,SQL状态HY000:您不能指定目标表“表'在FROM子句中更新 – sophie

+0

我正在使用MYSQL – sophie

+0

在两个查询中分解这一点,1得到最大值并且下一个插入 –

1

首先,获得最后一个记录END_DATE:

$sql = mysql_query("Select * from table1 ORDER BY ID Desc"); 

    if ($row=mysql_fetch_array($sql)) 
    { 
     $end_date=$row['end_date']; 
    } 

然后插入与前$ END_DATE的新纪录。