Invizz
Новичок
Множественный UPDATE
В движке есть класс Options. он содержит в себе несколько методов, типа, get, delete, set, add.
Есть таблица `options`.
[sql]
CREATE TABLE `options` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(100) NOT NULL default '',
`value` varchar(100) NOT NULL default '',
PRIMARY KEY (`id`),
KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
[/sql]
Опции постоянно дёргаются и обновляются, до 20 раз за выполнение скрипта. Поэтому я решил сделать так:
При создании экземпляра класса, я выбираю все опции, сохраняю в массив. Работаю с этим массивом.Если удалить опцию - я удаляю из массива и заношу ее в массив to_delete. А по выгрузке скрипта я за раз удаляю все удаленные опции:
Аналогично я поступаю и с добавлением. А есть ли у UPDATE синтаксис, чтобы обновить несколько рядов сразу при разном ID?
что нибудь типа
[sql]
UPDATE `options`
SET value IN ('val1', 'val2', 'val3')
WHERE name IN ('name1', 'name2', 'name3');
[/sql]
Зачем? Чтобы не дергать базу при каждом обновлении опций, а сделать все за один раз.
В движке есть класс Options. он содержит в себе несколько методов, типа, get, delete, set, add.
Есть таблица `options`.
[sql]
CREATE TABLE `options` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(100) NOT NULL default '',
`value` varchar(100) NOT NULL default '',
PRIMARY KEY (`id`),
KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
[/sql]
Опции постоянно дёргаются и обновляются, до 20 раз за выполнение скрипта. Поэтому я решил сделать так:
При создании экземпляра класса, я выбираю все опции, сохраняю в массив. Работаю с этим массивом.Если удалить опцию - я удаляю из массива и заношу ее в массив to_delete. А по выгрузке скрипта я за раз удаляю все удаленные опции:
PHP:
if (count($this->to_delete)) {
$names = implode(',', $this->to_delete));
$DB->query("DELETE FROM `options` WHERE `name` IN ($names)";
}
что нибудь типа
[sql]
UPDATE `options`
SET value IN ('val1', 'val2', 'val3')
WHERE name IN ('name1', 'name2', 'name3');
[/sql]
Зачем? Чтобы не дергать базу при каждом обновлении опций, а сделать все за один раз.