2011-07-26 73 views
0

這樣的條件:有一個表格在HTML和PHP haivng 120個字段左右它爲一個網站我正在提交這個表單去php頁面,我首先檢索所有值使用$ _REQUEST [],然後使用插入查詢將它們全部插入到我的mysql數據庫中相同表中的特定顏色中。現在我將不得不再次執行所有過程來更新這些值。因爲插入查詢和更新查詢的原因是非常不同的。如何使用mysql更新查詢和mysql一起插入查詢?

我不想寫另外100行代碼。有什麼方法可以使用我在插入查詢中寫入的代碼來更新數據。

回答

2

另一種選擇,並根據需求和鍵,你可以使用:

replace into tbl (<cols>) values (<vals>) 

如果不存在,或基於鍵(在一個查詢中插入/更新)

或更換,這將插入如果你只插入不希望插入兩次,你可以使用:

insert ignore into tbl (<cols>) values (<vals>) 

其中如果記錄已經插入基於鑰匙,它優雅地忽略

更多信息http://dev.mysql.com/doc/refman/5.0/en/replace.html

+0

是的,這正是我正在尋找,但我無法理解兩者之間的差異 (我的主要關鍵是不同城市的名稱,我真正想要的是,如果城市的名稱已經存在於數據庫中,它會更新數據爲其他城市添加一個新的行)在這種情況下哪兩個會更好 – Danny

+0

嗨Danny,對於您的請求,您會想要使用替換。請記住,如果你的城市包括多個州,爲了避免城市名稱衝突(多個州的同一城市名稱),你可能想讓州和城市成爲一個唯一的關鍵點。這樣,當你進入時,它將同時使用城市和州,而不是更新一個城市在不同的狀態 –

+0

謝謝,是的,我已經使州和市的主要。謝謝:) – Danny

1

沒有爲INSERTUPDATE相當類似的語法:本

INSERT INTO <table> SET 
column1 = value1, 
column2 = value2, 
... 
; 

UPDATE <table> SET 
column1 = value1, 
column2 = value2, 
... 
WHERE <condition> 
; 
+0

我用戶diiferent語法(「插入到表(coloum1,coloumm2,......)值( 'VALUE1', '值2' ........ ) – Danny

+0

你問過如何重用你的代碼 - 好吧,這是我用這個標準語法的方式 – wonk0

1
INSERT INTO yourtable (field1, field2, field3, ...) 
VALUES ($field1, $field2, $field3, ...) 
ON DUPLICATE KEY UPDATE field1=VALUES(field1), field2=VALUES(field2), etc... 

詳細構造here

6

實際上,在MySQL中,插入的替代語法與更新語法非常相似。你可以寫

insert customer set customerid=12345, firstname='Fred', lastname='Jones 

個人而言,我更喜歡這種語法,因爲它很容易看到什麼值進入每個字段。長字段列表的記錄尤其如此。

另一方面,它不是標準的SQL,因此如果您決定將您的應用程序移植到不同的數據庫引擎,則所有插入操作都必須重寫。

我偶爾使用的另一個選項是編寫一個小函數來創建插入和更新語句。然後你的函數的語法可以是相同的,不管生成的代碼有多不同。

+0

,但是對於將來我肯定會使用這個語法插入和更新很容易, – Danny

+0

我怎麼從來不知道這個語法? –

+0

@pmv:因爲你過着貧窮而貧窮的生活。 – Jay