MySQL Multiple UPDATE
11 отговора
448 прегледа
MySQL Multiple UPDATE
Здравейте на всички имам следния проблем искам да упдаите няколко полета с различни стойноти като стойността зависи от друго поле в съответната таблица. стигнал съм до някъде но ... не е точно това което искам:
mysql> SELECT * FROM nums;
+----+-----+-----+
| id | num | bad |
+----+-----+-----+
| 1 | 12 | 0 |
| 2 | 4 | 0 |
| 3 | 4 | 0 |
+----+-----+-----+
mysql> UPDATE nums SET bad=concat_ws('',bad,num) WHERE id IN (1,2,3);
Query OK, 3 rows affected (0.32 sec)
Rows matched: 3 Changed: 3 Warnings: 0
mysql> SELECT * FROM nums;
+----+-----+-----+
| id | num | bad |
+----+-----+-----+
| 1 | 12 | 12 |
| 2 | 4 | 4 |
| 3 | 4 | 4 |
+----+-----+-----+
3 rows in set (0.00 sec)
Искам да направя същото нещо само че стойностите на послето бад да не се взимат от нум а аз да ги задавам в самата заявка.
Break The UnBreakable
mysql> SELECT * FROM nums;
+----+-----+-----+
| id | num | bad |
+----+-----+-----+
| 1 | 12 | 0 |
| 2 | 4 | 0 |
| 3 | 4 | 0 |
+----+-----+-----+
mysql> UPDATE nums SET bad=concat_ws('',bad,num) WHERE id IN (1,2,3);
Query OK, 3 rows affected (0.32 sec)
Rows matched: 3 Changed: 3 Warnings: 0
mysql> SELECT * FROM nums;
+----+-----+-----+
| id | num | bad |
+----+-----+-----+
| 1 | 12 | 12 |
| 2 | 4 | 4 |
| 3 | 4 | 4 |
+----+-----+-----+
3 rows in set (0.00 sec)
Искам да направя същото нещо само че стойностите на послето бад да не се взимат от нум а аз да ги задавам в самата заявка.
Break The UnBreakable
Re: Май трябва да обясниш по-подробно
Малко е странно, че използваш CONCAT за числа. Защо тъй?
Осван това какъв ти е проблема за
"стойностите на послето бад да не се взимат от нум а аз да ги задавам в самата заявка"
UPDATE nums SET bad=42 WHERE id IN (1,2,3);
salle.online.bg/sig
Осван това какъв ти е проблема за
"стойностите на послето бад да не се взимат от нум а аз да ги задавам в самата заявка"
UPDATE nums SET bad=42 WHERE id IN (1,2,3);
salle.online.bg/sig
Re: MySQL Multiple UPDATE
Освен ако няма някаква закономерност в update-ите, така че сройността на bad да зависи от другите полета на същия ред, не се сещам за вариант това да стане в една заявка. Отделно зависи и коя версия на MySQL използваш...ако си 5.x имаш и stored procedures и май вложени селекти?, но по-рано от това можеш да разчиташ единствено на променливи.
Everything louder than everything else...
Everything louder than everything else...
Редактирано от Dakota на
Re: Май трябва да обясниш по-подробно
Значи идеята е да упдате полетата с посочените ид с различни стойности. и тези стойности да ги задавам от самта заявка. нещо от рода на.
UPDATE nums SET bad=12 WHERE id=1
UPDATE nums SET bad=4 WHERE id=2
UPDATE nums SET bad=56 WHERE id=3
....
но всичко това да става с една заявка.
Break The UnBreakable
UPDATE nums SET bad=12 WHERE id=1
UPDATE nums SET bad=4 WHERE id=2
UPDATE nums SET bad=56 WHERE id=3
....
но всичко това да става с една заявка.
Break The UnBreakable
Re: MySQL Multiple UPDATE
Версията на MySQL е 4.0.18 стандарт. Наистина има зависимост с едно друго поле но зависимоста не е определена. Просто в едно от полетата има част, всички или никакви номера изброени със запетай.
Break The UnBreakable
Break The UnBreakable
Re: MySQL Multiple UPDATE
Не съм сигурен, че разбрах това изречение:
"Просто в едно от полетата има част, всички или никакви номера изброени със запетай."
Логиката е проста - ако таблицата пази в себе си бъдещата информация за bad, то почти сигурно можеш да минеш с една заявка. Ако пък не - то ти трябват N заявки - синтаксисът на UPDATE е такъв.
[линк]
Та ако доизясниш онова изречение...ще измислим нещо.
Не можеш ли да дадеш реален пример?
Everything louder than everything else...
"Просто в едно от полетата има част, всички или никакви номера изброени със запетай."
Логиката е проста - ако таблицата пази в себе си бъдещата информация за bad, то почти сигурно можеш да минеш с една заявка. Ако пък не - то ти трябват N заявки - синтаксисът на UPDATE е такъв.
[линк]
Та ако доизясниш онова изречение...ще измислим нещо.
Не можеш ли да дадеш реален пример?
Everything louder than everything else...
Re: MySQL Multiple UPDATE
Значи,
в едното поле имам записание някави номера (123,2354,2432,234...),
Стойностите на друго поле от checkbox се избират част всички или никой от номерата. зависи от конкретния случай. Изкарвам всичките избрани ИД-та на веднъж като това води до н брой ид-та и н брой checkbox за всяко ид.
Break The UnBreakable
в едното поле имам записание някави номера (123,2354,2432,234...),
Стойностите на друго поле от checkbox се избират част всички или никой от номерата. зависи от конкретния случай. Изкарвам всичките избрани ИД-та на веднъж като това води до н брой ид-та и н брой checkbox за всяко ид.
Break The UnBreakable
Редактирано от nupaT на
не разбирам
Явно съм тъп...но пак не мога да схвана същината на проблема.
Каква е таблицата, какви полета има в нея, какви редове...какви масиви ти пристигат в PHP и какво искаш да направиш в последствие.
Покажи ми състоянието на таблицата преди UPDATE-а, след това с какви масиви разполагаш и след това състоянието на таблицата след евентуалния UPDATE.
Everything louder than everything else...
Каква е таблицата, какви полета има в нея, какви редове...какви масиви ти пристигат в PHP и какво искаш да направиш в последствие.
Покажи ми състоянието на таблицата преди UPDATE-а, след това с какви масиви разполагаш и след това състоянието на таблицата след евентуалния UPDATE.
Everything louder than everything else...
Re: не разбирам
Май днес говоря много несвързано, сигурно защото не съм спал много. както и да е.
таблицата в началното състояние.
id num bad
1 12,32,43 null
2 11,44,92 null
3 83,47,72 null
4 56,54,45 null
масивите на пхп.
$ids = array(1,2,3,4); //ид-та които трябва да се упдате;
$bad = array('12,32','44','','56,54,45'); // като всеки елемент от масива отговаря на номера на елемента от $ids, елементите на масива се взимат от чекбокс в зависимост от това кои са отметнати и кои не
Състояние на таблицата след евентуалния UPDATE
id num bad
1 12,32,43 12,32
2 11,44,92 44
3 83,47,72 null
4 56,54,45 56,54,45
Break The UnBreakable
таблицата в началното състояние.
id num bad
1 12,32,43 null
2 11,44,92 null
3 83,47,72 null
4 56,54,45 null
масивите на пхп.
$ids = array(1,2,3,4); //ид-та които трябва да се упдате;
$bad = array('12,32','44','','56,54,45'); // като всеки елемент от масива отговаря на номера на елемента от $ids, елементите на масива се взимат от чекбокс в зависимост от това кои са отметнати и кои не
Състояние на таблицата след евентуалния UPDATE
id num bad
1 12,32,43 12,32
2 11,44,92 44
3 83,47,72 null
4 56,54,45 56,54,45
Break The UnBreakable
ясно
Абсурд това да стане с един UPDATE, по простата причина, че за всеки ред информацията, която трябва да се запише не е еднозначно определена от останалите полета на реда, а зависи от външните данни (масиви).
Everything louder than everything else...
Everything louder than everything else...
Re: не разбирам
Само идея (не съм в час с MySQL):
Можеш да набуташ данните преди това в temptable.
След това да направиш update с join. Струва ми се че някой тук беше споменал, че MySQL го допуска.
PS.
Все пак да отбележа: Струва ми се че нещо в структурата на базата ти не е в ред. Не ми се вижда нормално съхраняване на такъв списък в едно поле. Но може и да не съм те разбрал.

Можеш да набуташ данните преди това в temptable.
След това да направиш update с join. Струва ми се че някой тук беше споменал, че MySQL го допуска.
PS.
Все пак да отбележа: Струва ми се че нещо в структурата на базата ти не е в ред. Не ми се вижда нормално съхраняване на такъв списък в едно поле. Но може и да не съм те разбрал.
Редактирано от NDeu на
Re: не разбирам
Сори, но според мен тази структура е безумна:
id num bad
1 12,32,43 12,32
2 11,44,92 44
3 83,47,72 null
4 56,54,45 56,54,45
Таблицата не е нормализирана.
Ако все пак запазиш структурата, ще ти трябва цикъл и на всяка итерация пускаш куери. Не виждам какъв ти е проблема да го направиш с 5-6 куерита (щом са чекбоксове едва ли са много на брой).
asl-bg.com - шантаво като теб ;)
id num bad
1 12,32,43 12,32
2 11,44,92 44
3 83,47,72 null
4 56,54,45 56,54,45
Таблицата не е нормализирана.
Ако все пак запазиш структурата, ще ти трябва цикъл и на всяка итерация пускаш куери. Не виждам какъв ти е проблема да го направиш с 5-6 куерита (щом са чекбоксове едва ли са много на брой).
asl-bg.com - шантаво като теб ;)