PHP MYSQL Вставка / Обновление - PullRequest
5 голосов
/ 10 мая 2009

У меня есть простая таблица, как показано ниже.

CREATE TABLE `stats` (
  `id` int(11) NOT NULL auto_increment,
  `zones` varchar(100) default NULL,
  `date` date default NULL,
  `hits` int(100) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

Так что просто храните простой счетчик посещений для каждой зоны в день.

Но я просто хочу увеличить значение хитов за тот же день.

Я пробовал MYSQL DUPLICATE KEY UPDATE, но это не сработает, поскольку у меня может быть много зон в разные даты, поэтому я не могу сделать их уникальными или датами.

Так что я могу думать только о том, чтобы сначала выполнить запрос, чтобы узнать, существует ли дата, а затем выполнить простой if () для вставки / обновления

.

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

Надеюсь, это имеет смысл: -).

И спасибо, если можете посоветовать.

Ответы [ 2 ]

7 голосов
/ 10 мая 2009

Объявите кортеж (zone, date) как уникальный в вашем операторе CREATE. Это заставит INSERT ... ON DUPLICATE UPDATE работать должным образом:

CREATE TABLE `stats` (
  `id` int(11) NOT NULL auto_increment,
  `zone` varchar(100) default NULL,
  `date` date default NULL,
  `hits` int(100) default NULL,
  PRIMARY KEY  (`id`),
  UNIQUE (`zone`, `date`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

INSERT INTO stats (zone, date, hits) values ('zone1', 'date1', 1) ON DUPLICATE KEY UPDATE hits = hits + 1;
1 голос
/ 10 мая 2009
$result = mysql_query("SELECT id FROM stats WHERE zone=$zone AND date=$today LIMIT 1");
if(mysql_num_rows($result)) {
    $id = mysql_result($result,0);
    mysql_query("UPDATE stats SET hits=hits+1 WHERE id=$id");
} else {
    mysql_query("INSERT INTO stats (zone, date, hits) VALUES ($zone, $today, 1)");
}

Что-то в этом роде, если я вас правильно истолковал ... это совершенно не проверено. Вы можете выяснить, что переменные.

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