在插入或更新之前检查MySQL行中的数据

时间:2011-03-20 22:02:27

标签: php mysql

我希望能够检查连续保存的数据,然后如果已存在的值存在 BOTH 值,则插入或追加,我该怎么办?

我要检查的值是Lat和Lon,两者都会被检查,如果它们与发送的数据相同,则附加描述,否则添加一个新行:

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

我一直在寻找UPDATE,但我似乎无法获得正确的语法:

3 个答案:

答案 0 :(得分: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。

答案 1 :(得分:1)

您尝试做出正确答案的很少。规范化是。

通常,您会创建一个类似于以下内容的关系表:

ID    |   Description(unique)

并存储所有描述。

答案 2 :(得分:0)

看看这个

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

并使用concat()函数追加文本。