在我的數據庫的表具有以下列:ID,CAMPAIGN_ID,opt_out_day 其插入一組「選擇退出天」的方法 - DATETIME值的陣列 - 如下:如何在執行MySQL INSERT時防止列對的值重複?
/**
* @param Integer $campaignId
* @param Array $optOutDays Array of DATETIME values
*/
public function addCampaignOptOutDays($campaignId, $optOutDays) {
$query = "INSERT INTO `".self::$tblOptOutDays."`
(campaign_id, opt_out_day)
VALUES
(:campaign_id, :opt_out_day)";
try {
$this->connection->beginTransaction();
$query = $this->connection->prepare($query);
$query->bindParam(':campaign_id', $campaignId, \PDO::PARAM_INT);
foreach ($optOutDays as $day) {
$query->bindParam(':opt_out_day', $day, \PDO::PARAM_STR);
$query->execute();
}
$this->connection->commit();
} catch (\PDOException $e) {
$this->connection->rollback();
throw new \Models\Database\DatabaseException($e->getMessage());
}
}
如何修改查詢以防止爲廣告系列重複選擇同一日期?換句話說,只要他們具有不同的'campaign-id',就可以在此表中存在具有相同opt-out-day的多行。 儘管爲(campaign_id,opt_out_day)添加一個唯一關鍵字並不是一個選項,因爲我不想在這種情況發生時拋出異常,我只是不想再次添加對。
您可以使用'INSERT IGNORE',以便MySQL在遇到重複時不會拋出錯誤。你應該有獨特的指標,因爲不管錯誤的價值會在哪一天滑落。 –