Почему оператор ON DUPLICATE KEY UPDATE увеличивает значение на 2 вместо 1? - PullRequest
3 голосов
/ 23 декабря 2010

Что может привести к тому, что оператор ON DUPLICATE KEY UPDATE увеличит значение на 2 вместо 1, здесь SQL используется с использованием:

INSERT INTO banner_view (banner_id,date,views) 
VALUES ('10',CURDATE(),'1')
ON DUPLICATE KEY UPDATE views=(views+1)

Вот схема базы данных:

CREATE TABLE `banner_view` (
`banner_id`  int(11) UNSIGNED NOT NULL ,
`date`  date NOT NULL ,
`views`  int(10) UNSIGNED NOT NULL ,
PRIMARY KEY (`banner_id`, `date`),
FOREIGN KEY (`banner_id`) REFERENCES `banner` (`banner_id`) ON DELETE CASCADE ON UPDATE CASCADE,
UNIQUE INDEX `banner_id` USING BTREE (`banner_id`, `date`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
ROW_FORMAT=COMPACT
;

Iпроверили журнал MySQL, чтобы убедиться, что запрос вызывается ровно 3 раза, но результат будет 6, что может быть неправильным?

ОБНОВЛЕНИЕ: этот метод вызывается внутри шаблона smarty, например: {app_banner :: getRandomBanner ()}

Ответы [ 5 ]

2 голосов
/ 23 декабря 2010

Проверьте, не вызываете ли вы запрос дважды в своем коде - он работает, как и ожидалось.

1 голос
/ 23 декабря 2010

Серебряный свет правильный, вы вызываете код дважды.Если вы не делаете это явно в коде, например:

inc3x();
inc3x();

Тогда, возможно, вы загружаете страницу дважды.Это может произойти, если вы включите пустой документ в документ.Пример:

<script src=""></script>

Используйте браузер для проверки всех загружаемых файлов ресурсов.

1 голос
/ 23 декабря 2010

Есть ли вероятность того, что на столе есть триггеры ?

SHOW TRIGGERS LIKE 'banner%'\G
1 голос
/ 23 декабря 2010

Единственная причина, по которой этот запрос будет увеличивать значения более чем на один, - это если он вызывается более одного раза.Поместите echo ('<p>Query being run</p>') в ваш код в точке, где вызывается запрос.Вы должны увидеть это один раз, если вы видите это более одного раза, то код запускается более одного раза.

Интерактивная отладка также может оказаться весьма полезной в подобной ситуации: если у вас установлен модуль отладки, такой как xdebug, вы можете использовать его для пошагового выполнения кода и просмотра того, что он делает.

0 голосов
/ 19 ноября 2012

У меня возникла именно эта проблема, и я сузил ее до следующего кода CSS:

body {
   background-image:url();
}

Если URL-адрес изображения не указан для background-image, это приводит к перезагрузке всей страницы в некоторых браузерах (как описано здесь ). У меня была проблема с Chrome (v23), но не с IE 10.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...