[英]Database normalization and lazy development
我認為這個問題已經出現,因為我很討厭做兩倍於我想像的必要工作。
我接受這樣的想法,即我可能缺乏MySQL和PHP的經驗,無法想到一個更簡單的解決方案。
我的問題是我有幾個表(可能還要添加更多表),其中有一個父表,只包含兩個字段-一個id(int)和一個標識它的名稱。
目前,我有七個表,每個表中至少有15個字段。 每個表都有一個字段,其中包含可以鏈接到父表的ID。
所有這些數據都不需要填寫-您只需要在父表中創建一個條目即可。 對於其他表,我有單獨的表格。
現在,制作這些表格是為了更新字段中的數據,這意味着如果有可用數據,我必須從表中拉出數據。
我想做的是,當我從表單接收數據時,可以在模型中使用UPDATE查詢。 但是,如果我要更新的表沒有該特定ID的條目,則需要執行插入操作。
所以,我當前的偽代碼是這樣的:
$sql = "SELECT id FROM table_x WHERE parent_id = ".$parent_id;
$res = $mysql_query($sql);
if( mysql_num_rows($res) == 1 )
{
$sql = "UPDATE table_x SET ... WHERE parent_id = ".$parent_id;
}
else
{
$sql = "INSERT INTO table_x VALUES ( ... )";
}
mysql_query($sql);
我要為每張桌子做兩個工作-我可以做些不同的事情還是做些更聰明的事情,或者這僅僅是必須做的事情嗎? 因為這對我來說似乎效率很低。
采用
INSERT ... ON DUPLICATE KEY UPDATE Syntax
如果找不到記錄,它將插入
否則,它將更新現有記錄,
您可以在插入前跳過檢查- 詳細信息
每個7表與父表的這種假設關系為1:1
或者使用REPLACE
而不是INSERT
它是一個插入,但是在違反唯一鍵(例如主鍵)時,將先執行DELETE,然后執行INSERT。
mysql_query("UPDATE table table_x ..... WHERE parent_id=".$parent_id);
if (mysql_affected_rows()==0) {
mysql_query("INSERT INTO .....");
}
在mysql中,您可以執行以下操作:
INSERT INTO table
(
col1,
col2
) VALUES(
'val1',
'val2'
) ON DUPLICATE KEY UPDATE table SET
col2 = 'val2'
查看文檔以獲取更多信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.