2013-02-01 93 views
0

喜的朋友,我需要跳過一個複製在的foreach,比繼續上其餘的請告訴我,我怎麼能做到這一點跳過的foreach MySQL的重複條目

foreach($arr as $key=>$arr1) 
{ 
    echo "<pre>"; 

$insert=mysql_query("INSERT INTO auth_user(id,username,first_name,last_name,email,password,is_active,date_joined) VALUES('".$key."','".$arr1['username']."','".$arr1['firstname']."','".$arr1['lastname']."','".$arr1['email']."','NULL','".$arr1['is_active']."','".$arr1['date_joined']."')",$conn1); 

echo $insert .'<br/>'; 
if($insert) 
    { 
     echo "DATA MIGRATE FOR USER ".$key; 
     $insert1=mysql_query("INSERT INTO stylequiz_score(user_id,style_quiz_score,style_quiz_answer) VALUES('".$key."','".$arr1['style_quiz_score']."','".$arr1['style_quiz_answer']."')",$conn1); 
    } 
    else 
    { 
     echo ("Error In MIGRATION FOR USER ".$key . mysql_error()); 

    } 
} 
+0

你怎麼知道它是否重複? –

+1

建議使用「唯一」,「主鍵」和/或類似的數據庫技術來防止重複。 – Passerby

+0

acctauly有成千上萬個條目,我需要進口,我不想打破腳本由於之間某種原因,我想如果由於某種原因,腳本之間打破了,當我開始再次運行腳本,下一次不應該拋出任何錯誤,現在它打破後的情況是不插入任何內容,並嘗試導入下一次 –

回答

2

使用INSERT語句的IGNORE修改:

$insert1=mysql_query("INSERT IGNORE INTO stylequiz_score(user_id,style_quiz_score,style_quiz_answer) VALUES('".$key."','".$arr1['style_quiz_score']."','".$arr1['style_quiz_answer']."')",$conn1); 

如果插入會得到一個重複鍵錯誤的行,此修改將導致插入到沒有錯誤被跳過。

+0

這就是檢查完美的作品感謝 –

+0

嗨Barmar我想我可以從你學到很多東西,你可以給我你的身份證,我可以跟你說話,如果可能的感謝 –

+0

沒有,對不起,我不想這樣做。 – Barmar

0

假設您有重複值$arr

使用array_unique

$res_array = array_unique($arr); 

裁判:http://php.net/manual/en/function.array-unique.php

要檢查重複在DATABSE,把你的插入查詢中,如果條件

$sql = mysql_query("SELECT * FROM auth_user WHERE email = '".$arr1['email']."'"); 
if(mysql_numrows($sql) == 0){ 
    $insert=mysql_query("INSERT INTO auth_user(id,username,first_name,last_name,email,password,is_active,date_joined) VALUES('".$key."','".$arr1['username']."','".$arr1['firstname']."','".$arr1['lastname']."','".$arr1['email']."','NULL','".$arr1['is_active']."','".$arr1['date_joined']."')",$conn1); 
} 
else{ 
    $insert = false; 
} 
+0

其實我想要的是,如果由於某些原因腳本接下來的時間之間,打破了,當我再次開始腳本不應該拋出任何錯誤,並跳過已經存在的項目,並繼續後 –

+0

改變了代碼現在 –

1

array_unique將刪除陣列中的所有重複值。在你的情況下,嘗試像這樣。

$arr = array_unique($arr); 

你不需要做任何額外的功能。