MySQL Multiple UPDATE

11 отговора 448 прегледа
#1

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
Отговор
в отговор на nupaT #2

Re: Май трябва да обясниш по-подробно

Малко е странно, че използваш CONCAT за числа. Защо тъй?

Осван това какъв ти е проблема за
"стойностите на послето бад да не се взимат от нум а аз да ги задавам в самата заявка"

UPDATE nums SET bad=42 WHERE id IN (1,2,3);

salle.online.bg/sig
Отговор
в отговор на nupaT #3

Re: MySQL Multiple UPDATE

Освен ако няма някаква закономерност в update-ите, така че сройността на bad да зависи от другите полета на същия ред, не се сещам за вариант това да стане в една заявка. Отделно зависи и коя версия на MySQL използваш...ако си 5.x имаш и stored procedures и май вложени селекти?, но по-рано от това можеш да разчиташ единствено на променливи.

Everything louder than everything else...

Редактирано от Dakota на

Отговор
в отговор на salle #4

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
Отговор
в отговор на Dakota #5

Re: MySQL Multiple UPDATE

Версията на MySQL е 4.0.18 стандарт. Наистина има зависимост с едно друго поле но зависимоста не е определена. Просто в едно от полетата има част, всички или никакви номера изброени със запетай.

Break The UnBreakable
Отговор
в отговор на nupaT #6

Re: MySQL Multiple UPDATE

Не съм сигурен, че разбрах това изречение:

"Просто в едно от полетата има част, всички или никакви номера изброени със запетай."

Логиката е проста - ако таблицата пази в себе си бъдещата информация за bad, то почти сигурно можеш да минеш с една заявка. Ако пък не - то ти трябват N заявки - синтаксисът на UPDATE е такъв.

[линк]

Та ако доизясниш онова изречение...ще измислим нещо.

Не можеш ли да дадеш реален пример?

Everything louder than everything else...
Отговор
в отговор на Dakota #7

Re: MySQL Multiple UPDATE

Значи,
в едното поле имам записание някави номера (123,2354,2432,234...),
Стойностите на друго поле от checkbox се избират част всички или никой от номерата. зависи от конкретния случай. Изкарвам всичките избрани ИД-та на веднъж като това води до н брой ид-та и н брой checkbox за всяко ид.

Break The UnBreakable

Редактирано от nupaT на

Отговор
в отговор на nupaT #8

не разбирам

Явно съм тъп...но пак не мога да схвана същината на проблема.

Каква е таблицата, какви полета има в нея, какви редове...какви масиви ти пристигат в PHP и какво искаш да направиш в последствие.

Покажи ми състоянието на таблицата преди UPDATE-а, след това с какви масиви разполагаш и след това състоянието на таблицата след евентуалния UPDATE.

Everything louder than everything else...
Отговор
в отговор на Dakota #9

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
Отговор
в отговор на nupaT #10

ясно

Абсурд това да стане с един UPDATE, по простата причина, че за всеки ред информацията, която трябва да се запише не е еднозначно определена от останалите полета на реда, а зависи от външните данни (масиви).

Everything louder than everything else...
Отговор
в отговор на nupaT #11

Re: не разбирам

Само идея (не съм в час с MySQL):
Можеш да набуташ данните преди това в temptable.
След това да направиш update с join. Струва ми се че някой тук беше споменал, че MySQL го допуска.

PS.
Все пак да отбележа: Струва ми се че нещо в структурата на базата ти не е в ред. Не ми се вижда нормално съхраняване на такъв списък в едно поле. Но може и да не съм те разбрал.

Редактирано от NDeu на

Отговор
в отговор на NDeu #12

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 - шантаво като теб ;)
Отговор