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でこれを行う方法を教えてください。ありがとう

4

3 に答える 3

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 で新しいレコードを挿入します。

于 2012-06-26T09:23:48.710 に答える
1

これを試して::

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

    Insert into table(id, start_date, end_date) values (id, @max_date ,end_date);
于 2012-06-26T08:52:11.053 に答える
1

1つのクエリで実行できます

INSERT INTO table1(cate_id,task_id,obj, start_date, end_date,line) 
SELECT 4,3,23, MAX(end_date), end_date, 'value_line'
FROM table1;

適切な構文に従う必要があります (2 番目の例): http://dev.mysql.com/doc/refman/5.5/en/insert-select.html

于 2012-06-27T01:26:30.377 に答える