我正在从Crunchbase API中提取数据并添加到数据库中。
我不确定对于两家公司、人或其他公司来说,最好的唯一标识符是什么,但我认为永久链接可以用作 ID。
我的问题是我如何检查是否已添加条目,如果有,则更新/替换数据,如果永久链接不存在,则将下一行作为新实体添加到表中。
我当前的代码:
<?php
$query = mysql_query("SELECT * FROM companies");
$result = mysql_fetch_assoc($query);
$num = mysql_num_rows($query);
if($num) // if the record exist, update it
{
mysql_query("UPDATE companies SET
permalink='".$array['permalink']."',
WHERE `permalink` = '" . $result['permalink'] . "'",$con);
}
else{
mysql_query("INSERT into companies SET
permalink='".$array['permalink']."'",$con);
}
mysqli_close($con);
?>
注意:该表名为"公司"
尝试重复键...
mysql_query("INSERT INTO companies SET permalink='".$array['permalink']."' ON DUPLICATE KEY UPDATE permalink=permalink ;
找到唯一 ID 后,您可以使用它检查记录是否存在:
$query = mysql_query("SELECT COUNT(*) FROM companies WHERE `permalink` = '" . $result['permalink'] . "'");
请注意,我实际上也更改了SELECT *
,因为如果您只想知道是否存在值,那么选择所有列的效率非常低。
通常,我建议您使用一些自动递增的数字字段作为唯一 ID。这是数据库设计中的常见做法,并且有(几个)充分的理由。如果将名为 id
的AUTO_INCREMENT
字段添加到表中,则可以
$query = mysql_query("SELECT id FROM companies WHERE `permalink` = '" . $result['permalink'] . "'");
然后检查是否得到一个空的结果集。如果没有,请使用该 ID ( UPDATE ... WHERE id = $id
) 执行UPDATE
,否则,执行INSERT
。
顺便说一下,检查语法是否有INSERT
,它没有像UPDATE
那样使用SET
。
最后,我不知道您是如何构建$result["permalink"]
的,但是如果您尚未这样做,请使用mysql_escape_string来防止SQL注入。
尝试重复键...从手册 http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html