У меня есть следующий запрос:Застрял с INSERT INTO дублированием KEY UPDATE
INSERT INTO `impressions` (`date`, `item_id`, `platform`, `country`) VALUES ('" . $date . "', '" . $item_id . "', '" . $platform . "', '" . $country . "') ON DUPLICATE KEY UPDATE `impressions` = `impressions` + 1
И следующий массив:
Array
(
[0] => 5
[1] => 2
[2] => 4
[3] => 17
)
Массив в основном состоит из item_ids, которые я хочу, чтобы вставить/обновить в базу данных.
Когда запрос выполняется, я хочу, чтобы он проверил, есть ли какие-либо строки из: сегодня, соответствуют определенному item_id, соответствуют указанной платформе и соответствуют указанной стране.
Например:
2015-03-05 5 mobile US (new insert)
2015-03-05 2 mobile UK (new insert)
2015-03-05 5 mobile US (this would +1 impression from first one)
2015-03-05 17 desktop US (new insert)
2015-03-06 5 mobile US (this would create a new insert because the date doesn't exist)
Я также хочу, чтобы передать массив item_ids, как указано выше, с использованием IN, чтобы избежать многократного зацикливания.
Сейчас мы сейчас делаем это следующим образом:
$item_ids = array('5', '2', '4', '17');
foreach($item_ids as $id){
$q = mysql_query("SELECT `id` FROM `impressions` WHERE `date` = '" . $date . "' AND `item_id` = '" . $id . "' AND `platform` = '" . $platform . "' AND `country` = '" . $country . "'");
if (mysql_num_rows($q)){
$r = mysql_fetch_array($q);
mysql_query("UPDATE `impressions` SET `impressions` = `impressions` + '1' WHERE `id` = '" . $r['id'] . "'");
} else {
mysql_query("INSERT INTO `impressions` (`date`, `item_id`, `platform`, `country`, `impressions`) VALUES('" . $date . "', '" . $id . "', '" . $platform . "', '" . $country . "', '1') ");
}
}
Мы в основном хотят, чтобы преобразовать этот огромный (и плохо закодированных) цикл, в 1 MYSQL INSERT/UPDATE запрос, который получает передается массив item_ids в использовать с IN.
Я действительно смущен, как я должен подходить к этому. Любая помощь будет принята с благодарностью.
С этим исправлением он будет достичь того, чего я стремлюсь? –