2014-02-18 165 views
1

我在mysql中有一個表。它有以前的幾條記錄。它的字段是a,b和c。有時候我在這個表格中插入一條記錄,例如這個值有不同的值:在mysql的下一條記錄中插入最後一條記錄字段

$query = "INSERT INTO table(a, b, c) VALUES('1', '0', '2')"; 

值是字符。似乎表中的最後一條記錄是5,6,4.我的意思是a = 5,b = 6和c = 4,我想插入一條新記錄。我的值是1和0和2,但我希望你能幫我這個方法: 當b == 0時,我不想保存它,而是想保存表中的最後一個字段。例如我插入1,0,2和它只是插入一個= 1和c = 2,但其插入的最後一個字段表,而不是這個0,這是6

是這樣的:

if(false) 
{ 
    $query = "INSERT INTO table(a, b, c) VALUES('1', The Last Value In Table, '2')"; 
} 

我寧願不讀取表格的最後一個記錄並使用它的值,因爲它可以降低速度,速度非常重要。它更好地使用自動執行它的mysql命令。

+3

'INSERT INTO table [17]'?嗯?你爲什麼不使用'AUTO_INCREMENT'主鍵?要獲得最後一行,你可以使用'SELECT MAX(id)FROM your_table',假設'id'是自動增量主鍵的列名。 – Raptor

+0

對不起。插入表中。我使用自動增量,但我寧願不去取最後一個記錄。我需要一些自動執行的操作。可能嗎? –

+0

在MySQL中搜索'INSERT INTO ... SELECT'。 – Raptor

回答

1

由於您需要上次插入記錄的數據,您必須從某處獲取它。首先想到的是:讀取表格並查找最後插入的記錄,這是您不需要的,可能是因爲表太大而無法快速訪問數據。

所以你需要一個查找表,只包含最後插入的值(即一個記錄):

create table last_insert_mytable(a varchar, b varchar, c varchar); 

您與觸發器填寫:

create trigger trg_mytable_last_insert after insert on mytable 
    for each row begin 
    delete from last_insert_mytable; 
    insert into last_insert_mytable (a, b, c) values (new.a, new.b, new.c); 
    end; 

所以你插入語句看起來象這個:

insert into mytable(a, b, c) 
values ('1', (select b from last_insert_mytable), '2'); 

或(只要在last_insert_mytable中已經有記錄):

insert into mytable(a, b, c) 
select '1', b, '2' from last_insert_mytable; 

請記住,由於觸發器的原因,每個插入點都會變慢一點。由於只有一條記錄需要處理,因此比在mytable中查找最後插入的記錄要快。這取決於mytable的大小。這發生在每個插入到mytable中。如果很少需要查看最新記錄,那麼最好每隔一段時間進行一次慢速查找,而不是每次都稍微慢一點。那麼,試試吧。