Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Update || Insert (Heggi) 31/07/2007 - 00:21:47
      Re: Update || Insert (xeim) 31/07/2007 - 02:50:56
      Re: Update || Insert (slash) 07/08/2007 - 14:42:03
      Re: Update || Insert (slash) 07/08/2007 - 14:47:23

> Original message text:
> From: Heggi - 31/07/2007 - 00:21:47
> Subject:Update || Insert
> -----------------
> Суть проги - запись в базу данные о траффике почасово.
> т.е. сколько с какого на какой хост прошло байт.
> Причем если записи типа from=x.x.x.x to=y.y.y.y нет, то надо сделать INSERT со значением трафика, а если есть, то UPDATE с прибавлением числа в поле.
> Суть вопроса: Как можно быстро определить присутствует ли запись с определенными параметрами (время, отправитель, получатель) в таблице, чтобы решить что использовать Insert или update. Или базу саму можно научить этому?
> Select для определения не предлагать... Не думаю, что он будет быстро отрабатывать, когда база достаточно наполнится информацией о трафике.
>


From: xeim - 31/07/2007 - 02:50:56
Subject:Update || Insert
-----------------
Именно такая возможность описана в документации по mysql:
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

Кратко. Допустим в таблице `traffic` есть поля:
`time` DATETIME
`from` INT UNSIGNED
`to` INT UNSIGNED
`bytes` BIGINT UNSIGNED

Нужно создать уникальный индекс по полям `time`, `from` и `to`:
CREATE UNIQUE INDEX idx_time_from_to
ON `traffic` (`time`, `from`, `to`)

Теперь запрос для сохранения почасовой статистики трафика:
INSERT INTO `traffic`(
`time`,
`from`,
`to`,
`bytes`
)
VALUES (
DATE_FORMAT( NOW(), "%Y-%m-%d %H:00:00" ),
INET_ATON( $from ),
INET_ATON( $to ),
$bytes
)
ON DUPLICATE KEY UPDATE `bytes` = `bytes` + $bytes



[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
32006



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |