powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / групповой UPDATE
12 сообщений из 12, страница 1 из 1
групповой UPDATE
    #38841414
Nicolai6120
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Необходимо обновлять набор из 100-150 опций типа TINYINT (1/0 -> true/false). К сожалению, не все так просто как во вставке и приходится ухищряться. Часто вижу предложения типа:

UPDATE mytable
SET myfield = CASE other_field
WHEN 1 THEN 'value'
WHEN 2 THEN 'value'
WHEN 3 THEN 'value'
END
WHERE id IN (1,2,3)

Но эта штука катит в mysql 5.1, к примеру, и совсем не катит в v5.5.

А на сервере у меня конечно же mysql v5.5. Сделал для теста 24 отдельных update и это на таблице с 40 записями заняло 0.35 сек. При update 150 записей на таблице с 10.000 записей представляю, как это будет работать.

Подскажите что-нибудь? Как такие вещи правильно делать?
...
Рейтинг: 0 / 0
групповой UPDATE
    #38841481
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicolai6120представляю, как это будет работать.Ровно так же, если на поле id есть индекс. И вообще разница между 40 и 10000 записей в такой задаче ничтожна. Вот если бы у вас было миллионов 10-20 записей, тогда можно было бы о чём-то думать...
Nicolai6120катит в mysql 5.1, к примеру, и совсем не катит в v5.5.конкретнее? каковы ваши критерии "катибельности"?
...
Рейтинг: 0 / 0
групповой UPDATE
    #38841531
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicolai6120Необходимо обновлять набор из 100-150 опций типа TINYINT (1/0 -> true/false).Сколько бы там не требовалось обновлять записей - достаточно 2 запросов.Которые к тому же можно отправить на сервер одной строкой.
...
Рейтинг: 0 / 0
групповой UPDATE
    #38841856
Nicolai6120
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
akina, это изведвательство))) Скажите же мне эти 2 чудо запроса) // По поводу критериев катибельности: на 5.1 один и тот же запрос работает, а на 5.5 - проходит без ошибок, но не делает изменений никаких в таблице.
...
Рейтинг: 0 / 0
групповой UPDATE
    #38841876
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicolai6120на 5.5 - проходит без ошибок, но не делает изменений никаких в таблице.Дело не в версии как таковой, а в запросе/таблице/настройках/данных. Что-то отличается от того места, где версия 5.1.
...
Рейтинг: 0 / 0
групповой UPDATE
    #38841880
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicolai6120Скажите же мне эти 2 чудо запросаПодозреваю, что такие:
Код: sql
1.
2.
3.
UPDATE mytable
SET myfield=0
WHERE ...

Код: sql
1.
2.
3.
UPDATE mytable
SET myfield=1
WHERE ...
...
Рейтинг: 0 / 0
групповой UPDATE
    #38841887
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicolai6120Скажите же мне эти 2 чудо запроса
Я не понял... ну тут вовсе не нуждно быть семи пяток во лбу-то...
Nicolai6120Необходимо обновлять набор из 100-150 опций типа TINYINT (1/0 -> true/false).Т.е. значений назначения - всего два. Ну и
Код: sql
1.
2.
UPDATE table SET tinyint_field = 1 WHERE id in (id set for set TINYINT field to true);
UPDATE table SET tinyint_field = 0 WHERE id in (id set for set TINYINT field to false);
...
Рейтинг: 0 / 0
групповой UPDATE
    #38841892
Nicolai6120
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ооо мерси! о таком варианте я и не подумал. У меня ведь и правда всего 2 возможных значения. // А что касается настрое и прочего...Запрос один и тот же, таблица простая как 2 пальца (в обеих mysql с одного дапма взята). Методом исключения остается настройка какая-то....но я не подозреваю, какая настройка могла бы так изменить поведение стандартного CASE оператора.
...
Рейтинг: 0 / 0
групповой UPDATE
    #38841904
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicolai6120А что касается настрое и прочего...Запрос один и тот же, таблица простая как 2 пальца (в обеих mysql с одного дапма взята). Методом исключения остается настройка какая-то....но я не подозреваю, какая настройка могла бы так изменить поведение стандартного CASE оператора.Это было сказано в широком смысле, поскольку видно, что вы показываете не настоящий боевой запрос, а лишь его модель. Конкретно настройки могли бы играть роль в случае с разными кодировками и, возможно, в случае с неявными преобразованиями типов.

Попробуйте примерно так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT id, myfield,
CASE other_field
WHEN 1 THEN 'value'
WHEN 2 THEN 'value'
WHEN 3 THEN 'value'
END myfiled_new
FROM mytable
WHERE id IN (1,2,3) 

И будет видно в каких строках что на что должно измениться.
...
Рейтинг: 0 / 0
групповой UPDATE
    #38841935
Nicolai6120
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не люблю делать из людей экстрасексов, поэтому:

1. боевой запрос

UPDATE option_value SET value = CASE id
WHEN 1 THEN 0
WHEN 2 THEN 0
WHEN 3 THEN 0
END WHERE id IN (1,2,3)

2. частичный дамп

--
-- Структура таблицы `option_value`
--

CREATE TABLE IF NOT EXISTS `option_value` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`option_id` int(10) unsigned NOT NULL,
`hotel_id` int(10) unsigned NOT NULL,
`room_cateory_id` int(10) unsigned DEFAULT NULL,
`option_value_name_id` int(10) unsigned DEFAULT NULL,
`value` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=46 ;

--
-- Дамп данных таблицы `option_value`
--

INSERT INTO `option_value` (`id`, `option_id`, `hotel_id`, `room_cateory_id`, `option_value_name_id`, `value`) VALUES
(1, 1, 100, 17, NULL, '0'),
(2, 2, 100, 18, NULL, '0'),
(3, 3, 100, NULL, NULL, '0');

Вот на такой таблице я все это и проверял.

Кстати Ваш вариант для проверки, насколько я понял, должен выглядеть примерно так при моей реальной стуктуре таблицы

SELECT id, value,
CASE option_id
WHEN 1 THEN 0
WHEN 2 THEN 0
WHEN 3 THEN 0
END value
FROM option_value
WHERE id IN (1,2,3)

При выполнении дает и там и там одинаковый результат. То есть данная проблема проявляет себя только в том запросе.
...
Рейтинг: 0 / 0
групповой UPDATE
    #38841961
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм, а как именно вы проверяли, что "не делает изменений никаких в таблице" ?
В приведенном дампе ничего измениться и не должно.
...
Рейтинг: 0 / 0
групповой UPDATE
    #38842127
Nicolai6120
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Логично, учитывая нулевые значения))) Значения были разные в базе в поле value, когда я тестировал.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / групповой UPDATE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]