2013-06-18 54 views
2

我有如下表設置唯一的優先

id year name activation 
1 2013 TEST 1 

id A_I 
year, name UNIQUE 
name, activation UNIQUE 

我用這個查詢插入/更新的數據:

INSERT INTO LISTE_DATI 
    (year, name, activation) 
VALUES 
    ('$varray[1]', '$varray[2]', '$varray[3]') 
ON DUPLICATE KEY UPDATE 
    year= '$yr', 
    name= '$na', 
    activation= '$act' 

如果我將此數據發送到表:

$yr = 2014 
$na = TEST 
$act = 0 

查詢INSERT表中的數據。這對我來說沒問題!在表

$yr = 2015 
$na = TEST 
$act = 1 

查詢UPDATES第一行(2013/TEST/1)

如果我將此數據發送到表。 在這種情況下,我也想要一個INSERT。

我該如何調整它?

+0

通過在所有三列上創建唯一鍵? –

+0

瞭解[* prepared statements *](http://j.mp/T9hLWi) – Kermit

回答

2

您正在告訴您的INSERT查詢,當它發現重複鍵(UNIQUE)時,將改爲更新該行。

您正在插入(2012, 'TEST', 1)。這是一個重複的密鑰;鑰匙name, activation,您的第二個鑰匙UNIQUE!你已經有一排'TEST', 1;該行與id=1

INSERT查詢更新該行,因爲它是重複鍵。

您需要修改表格中的關鍵字,以便它反映出您想要的數據。你想要什麼INSERT查詢來考慮重複?基於此創建您的UNIQUE密鑰。

+0

謝謝!所以,一個解決方案可能是刪除第二個唯一的鍵(名稱,激活),只有第一個(年份,名稱)? – Perocat

+0

@Perocat:這是一個解決方案。根據您的數據,您還可以在所有3個字段(年份,名稱,激活)上生成一個UNIQUE鍵。 –

+0

謝謝..沒有一個唯一的關鍵在所有3個領域將無法正常工作。我不能爲同一個名稱進行兩次激活,但同一年的兩次激活是... – Perocat