2011-03-20 108 views
0

我希望能夠檢查一行中保存的數據,然後插入或追加值存在一個已經存在的值,我該怎麼做?在插入或更新之前檢查MySQL行中的數據

我想檢查的值是緯度和經度和兩人都會被檢查,如果他們是一樣的發送數據,則說明被追加,否則增加一個新行:

Table Layout e.g.: 
ID(Unique) | Lat | Lon | Description | Date 
1   0.1 0.1 Test   some date 

Data being sent: 
Lat: 0.1, Lon: 0.1, Description: Test2 

I would therefore like the table to end up like this: 
ID(Unique) | Lat | Lon | Description | Date 
1   0.1 0.1 **Test, Test2** some date 

More data being sent: 
Lat: 0.2, Lon: 0.1, Description: Test3 

After: 
ID(Unique) | Lat | Lon | Description | Date 
1   0.1 0.1 Test, Test2 some date 
2   0.2 0.1 Test3   some date 

我有一直在尋找更新,但我似乎無法得到正確的語法:

回答

2

如果將Lat和Lon設置爲複合唯一鍵,則可以使用INSERT...ON DUPLICATE KEY UPDATE語法。

INSERT INTO tableName (Lat, Lon, Description, Date) VALUES 
(0.1, 0.1, 'Test 2', NOW()) 
ON DUPLICATE KEY UPDATE 
Description = CONCAT(Description, ', Test2') 

這具有非ANSI(因此不可移植)SQL的缺點。

+0

感謝您的幫助= D現在有這麼多的意義,猜一切都是一個明確的解釋。 – nhunston 2011-03-20 22:20:35

0

在這個

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

看一看,使用concat()函數來追加文本。

+0

那麼,我該怎麼做才能使它只會是重複的,如果他們都是? – nhunston 2011-03-20 22:06:38

+0

Andy已經寫信給你完整的代碼。 +1給他:) – 2011-03-20 22:11:29

+0

確實,謝謝你的幫助太多的閱讀,讓我有點不那麼笨= P – nhunston 2011-03-20 22:26:17

1

很少是你想要做的正確答案。規範化是。

通常你會創建一個看起來像一個關係表:

ID | Description(unique) 

和存儲所有的描述存在。

相關問題