我的代码运行良好。
$sql = "INSERT IGNORE INTO phpc_events (cid, owner, subject, description, ctime)
SELECT '1', '1', title, description, start_tdate from at_courses";
mysql_query($sql);
我把它放到这个页面中:
> http://localhost/msigilearnv2/tools/calender/copy_database.php
首次运行页面时,它会将表从at_courses复制到phpc_events。 当第二次运行..我怎么能防止重复数据?因为它会不断添加相同的数据。我把忽略但仍然无效
答案 0 :(得分:1)
我正在与您分享其中一个替代方案。假设您在数据库中有记录,并且cid值为“1”。
如果值已存在于数据库中,请先检查该值。
$sql = "SELECT cid FROM phpc_events";
$returned = mysql_query($sql);
if(mysql_num_rows($returned) > 0){
while( $row = mysql_fetch_array($returned) ){
$PhpcArray [] = $row; //stores result returned in array to ensure less resource used
}
}
$sqlC = "SELECT anotherId FROM at_courses";
$returnedC = mysql_query($sqlC);
if(mysql_num_rows($returnedC) > 0){
while( $rowC = mysql_fetch_array($returnedC) ){
if( in_array( $rowC['anotherId'], $PhpcArray ) ){
// do nothing as id is already exists in phpc_events
}
else{
// do insertion because id in at_courses is not exist yet in phpc_events
}
}
}
希望这有帮助。
另一种选择。
顺便说一下,如果它与您的列匹配,您也可以尝试此查询,因为我不知道您的表结构是什么样的
SELECT cid
FROM at_courses
WHERE cid NOT IN (
SELECT cid FROM phpc_events
)
此查询将返回at_courses中的cid,该cid尚未出现在phpc_events中。然后插入从at_courses表返回的那些cid。
谢谢。
答案 1 :(得分:0)
我的MySQL并不好,但你需要做类似的事情:
$sql = "INSERT IGNORE INTO phpc_events (cid, owner, subject, description, ctime)
SELECT '1', '1', title, description, start_tdate from at_courses"
left join phpc_event on phpc_events.cid = at_courses.cid //(and others you want matched for dups
where phpc_events.cid is null
;
答案 2 :(得分:0)
如果表格中有主键,则可以将INSERT
替换为REPLACE
。如果主键已存在,这将插入新记录或替换它们。
答案 3 :(得分:0)
通过添加UNIQUE约束来改变表
ALTER TABLE phpc_events ADD CONSTRAINT your_field UNIQUE (cid, owner, subject, description, ctime)