簡體   English   中英

MySQL在表中插入多行(如果尚不存在)

[英]MySQL insert multiple rows into a table if they don't already exist

如果我有這樣一個表:

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

我在PHP中有一個數組。 我們稱之為$choices[] selection對應於choices數組的數組索引。 如果我向$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++;
          }
      }
   } 

如果所有內容都將使用“ new”進行更新,則可以輕松實現這一點。

檢查以下代碼:

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

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

對於不存在的值,請嘗試對其進行配置,以便在未指定時將其值默認為false。 當然,可以根據我上面的UPDATE語句輕松地修改INSERT語句。

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

我最終使用循環將一個大查詢字符串連接起來,看起來像這樣,除了更大:

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')

而且有效。 無論它是否是最好的,我都不知道,但至少我沒有向數據庫發送數百個查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM