2011-10-14 95 views
1

我有一個大陣列。是否有其他方法檢查數組中的$value是否存在於MySql表vote中,如果不存在,則將$value插入vote。這是我目前正在做的。有更好的方法嗎?替代foreach MySql

foreach($rowids as $value) { 


     $select = mysql_query("SELECT voteid FROM vote WHERE username='$username' AND voteid='$value' LIMIT 1",$this->connect); 

      if(mysql_num_rows($select)==0) { 

     $insert = mysql_query("INSERT INTO vote VALUES ('','$value','$username')",$this->connect); 

      } 
     } 
+0

你可以簡單地嘗試插入和處理錯誤,承擔相應的唯一約束到位 – Phil

+0

在大多數情況下,你會想存儲用戶標識,而不是varchar用戶名。 – carpii

回答

4

如果您在(value,username)UNIQUE INDEX那麼你可以使用INSERT IGNORE

INSERT IGNORE INTO vote (foo,voteid,username) VALUES ('','$value','$username') 

要添加唯一索引:

ALTER TABLE vote ADD UNIQUE INDEX idx (voteid,username) 

如果有這將失敗「在vote中違反UNIQUE INDEX的「重複」行。要刪除重複的行,並在同一時間添加唯一索引:

ALTER IGNORE TABLE vote ADD UNIQUE INDEX idx (voteid,username) 
+0

's/value/voteid /' – Phil

+0

@菲爾:感謝您的糾正。 – unutbu

+0

謝謝..這是一個更好的方法性能明智的數百名用戶? – user892134