[英]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.