我有一个包含3列的表- id (pk),pageId (fk),name。我有一个php脚本,它转储大约5000条记录到表中,大约一半是重复的,具有相同的pageId和名称。pageId和name的组合应唯一。当我在php中循环脚本时,最好的方法是防止重复项被保存到表中?
发布于 2010-02-08 13:59:16
第一步是在表上设置一个唯一的键:
ALTER TABLE thetable ADD UNIQUE INDEX(pageid, name);然后你必须决定当有重复的时候你想要做什么。您是否应该:
在表格(pageid,name)值(1,"foo")中插入IGNORE,(1,"foo");
在重复密钥更新时插入表格(pageid,name,somefield)值(1,"foo","first")在重复密钥更新(somefield = 'first')时插入表格(pageid,name,somefield)值(1,"foo","second")在重复密钥更新时插入(pageid,name,somefield)值(1,“foo”,“'second')
在重复密钥更新(pagecount = pagecount + 1)时插入到表(pageid,name)值(1,"foo"),(1,"foo")中
发布于 2010-02-08 13:55:45
您也可以使用mysql忽略该错误: INSERT ignore INTO TABLE ...它将忽略键错误,跳过该插入并转到下一个。
发布于 2010-02-08 13:45:15
从mysql点,您可以执行以下操作
alter table YOURTABLE add unique index(pageId, name);如果您的措辞是正确的,并且您想在php中执行此操作,则可以执行此操作
$already_done = array();
foreach ($records as $record)
{
$unique_hash = md5($record['name'].$record['pageId']);
if (!in_array($unique_hash, $already_done))
{
$already_done[] = $unique_hash;
// sql insert here
}
}无论哪种方式,这些都会让你感觉很好。
https://stackoverflow.com/questions/2219786
复制相似问题