我相信这个问题已经出现了,因为我做了两倍于我想象的工作的烦恼是必要的。
我接受这样的想法,即我可能缺乏使用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);
对于我拥有的每张桌子,我有两个这样做 - 我可以做一些不同或更聪明的事情,或者这只是必须要做的事情吗?因为这对我来说似乎效率很低。
答案 0 :(得分:4)
使用
INSERT ... ON DUPLICATE KEY UPDATE Syntax
如果找不到记录,它将插入,
否则,它将更新现有记录,
并且您可以在插入前跳过检查 - details
这个假设每个7表与父表的关系是1:1
答案 1 :(得分:2)
或者使用REPLACE
而不是INSERT
- 它是一个插入,但会在违反唯一键(例如主键)时执行DELETE然后INSERT。
答案 2 :(得分:0)
mysql_query("UPDATE table table_x ..... WHERE parent_id=".$parent_id);
if (mysql_affected_rows()==0) {
mysql_query("INSERT INTO .....");
}
答案 3 :(得分:0)
INSERT INTO table
(
col1,
col2
) VALUES(
'val1',
'val2'
) ON DUPLICATE KEY UPDATE table SET
col2 = 'val2'
查看documentation了解更多信息