2012-08-02 25 views
0

如果我有這樣的一個表:MySQL的插入多行到一個表,如果他們不存在

+-------------+-------------+ 
| Field  | Type  | 
+-------------+-------------+ 
| document | varchar(35) | 
| section  | int(11)  | 
| selection | int(11)  | 
| status  | varchar(35) | 
+-------------+-------------+ 

而且我在PHP的數組。我們稱之爲$choices[]。列selection對選擇數組的數組索引進行覈對。如果我向$choices數組添加一個或多個元素,那麼我需要更新數據庫。我會在一個循環中運行,其中$document$section也被設置。我不想假設在編號中間沒有缺失的行。什麼是$choices中每個元素檢查(文檔,節,選擇)的最有效方式,創建不存在的任何元素,並將其狀態設置爲「新」? 我是否必須將其作爲循環來完成,還是有一種方法可以在一個查詢中執行此操作?

這是完全沒有經過測試的,但基本上我是這樣做的,如果我沒有尋求幫助。我猜想有人可能比我有更好的解決方案。

foreach($documents as $document) 
    { 
    foreach($sections as $section) 
     { 
     $choices=$master_array[$document][$section]; 
     $ch_count=count($choices); 
     $counter=0; 
     while($counter < $ch_count-1) 
      { 
      $query="SELECT status FROM mytable WHERE document='$document' AND section='$section' AND selection='$counter'"; 
      $result = mysql_query($query); 
      if(mysql_num_rows($result)==0) 
       { 
       $query="INSERT INTO mytable VALUES('$document','$section','$counter','new')"; 
       $result = mysql_query($query); 
       } 
      $counter++; 
      } 
     } 
    } 
+0

你試過了什麼? – Cfreak 2012-08-02 14:09:21

+0

你的代碼在哪裏? – 2012-08-02 14:11:53

+0

我仍然在建模,但我會稍後發佈一些僞代碼。 – TecBrat 2012-08-02 14:15:03

回答

0

我結束了使用循環contatenate在一起看起來是這樣的一個大的查詢字符串,除了要大得多:

INSERT IGNORE INTO mytable VALUES 
('doc1','1','0','New'), 
('doc1','1','1','New'), 
('doc1','1','2','New'), 
('doc1','1','3','New'), 
('doc1','2','0','New'), 
('doc1','2','1','New'), 
('doc1','2','2','New'), 
('doc1','2','3','New'), 
('doc1','3','0','New'), 
('doc1','3','1','New'), 
('doc1','3','2','New') 

和它的作品。不管它是否最好,我不知道,但至少我沒有向數據庫發送數百個查詢。

0

如果一切都將被更新爲「新」,那麼這可以輕鬆實現。

檢查下面的代碼:

<? 
$setStr = ""; 
foreach($choices as $column) 
{ 
    $setStr .= $column . "=" . "'new', "; 
} 

$sqlCommand = "UPDATE table SET ".substr($setStr,'',-2)." WHERE pick_a_row_here;"; 
echo $sqlCommand; 
?> 

對於不存在,嘗試配置它,以便它們的值默認爲false,如果未指定的人。當然,INSERT語句可以很容易地從我的上面的UPDATE語句中進行調整。

讓我知道你在想什麼。如果您有任何問題或意見,我會盡力回答。

相關問題