powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / массовое изменение значений ячеек
32 сообщений из 32, показаны все 2 страниц
массовое изменение значений ячеек
    #38931183
S_Layer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
приветствую вас, добрые форумчане!

вот какой страшной задачей я озадачился:
предположим у нас есть таблица, в которой имеются некие суммы по каждому из месяцев:
Код: plaintext
1.
2.
3.
4.
id  M1  M2  M3  M4 ... M12
1   25  36  17  85     85
2   63  18  19  66     105
3   48  17  2   68     15
теперь нужно внести некую новую строку, в которой мне нужно получить сумму записей по каждому из месяцев с id, например, 1 и с id, например, 2.

ситуация усложняется еще тем, что в моей таблице перед самими месяцами таких вот столбцов с id еще 5 штук...
тоесть вместо
Код: sql
1.
WHERE id=1

мне в этом запросе придется писать еще чтото типа
Код: sql
1.
WHERE firstId=1 AND secondId=6 AND thirdId=19...

и если предложите писать после каждого месяца этот WHERE, это напрочь снесет мою крышу...
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931185
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Layer,

Код: sql
1.
WHERE id in(1,3,5,8)
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931199
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot S_Layer]приветствую вас, добрые форумчане!

вот какой страшной задачей я озадачился:
предположим у нас есть таблица, в которой имеются некие суммы по каждому из месяцев:
Код: plaintext
1.
2.
3.
4.
id  M1  M2  M3  M4 ... M12
1   25  36  17  85     85
2   63  18  19  66     105
3   48  17  2   68     15


уже плохо, уже двойка.
нарушение первой нормальной формы,
нужно перепроектировать бд, должна быть одна сумма и плюс месяц в первичный ключь, и 12 записей на год, а не 1.
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931209
S_Layer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivнарушение первой нормальной формы,
нужно перепроектировать бд, должна быть одна сумма и плюс месяц в первичный ключь, и 12 записей на год, а не 1.
чо?
всмысле не могли бы вы конкретизировать своё мнение? если быть точным, то я не понял ни процента смысла вашего высказывания
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931221
S_Layer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяWHERE id in(1,3,5,8)не! это пригодится если надо 4 строки с этими айдишниками сбивать в кучку. а я имел ввиду, что на самом деле у меня строение таблицы примерно следующее (в месяцах там деньги, некие суммы денег):
Код: plaintext
1.
2.
 id   1st_id  2nd_id  3rd_id  4rd_id  5th_id  6th_id      month1        month2        month3  month4  month5  month6  month7  month8  month9  month10  month11  month12
1       5       85       80      74      14      33         1563,45       457,43        546,23  45,00   523,03  1563,45 457,43  546,23   45,00  54523,03 6765,43   23,23
2       6       85       80      74      14      33          62,25        127,54        842,15  55,55   221,13  1611,11 252,12 1642,53  332,10   223,18 3725,13    23,23
таких строк там более тыщи, есстесственно айдишники разные и в разных комбинациях.
и вот надо теперь добавить вот какую строку
Код: plaintext
1.
1001    7       85       80      74      14      33    (1563,45+62,25) (457,43+127,54)
тоесть фактически меняется только поле 1st_id и все значения всех месяцев
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931243
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_LayerMasterZivнарушение первой нормальной формы,
нужно перепроектировать бд, должна быть одна сумма и плюс месяц в первичный ключь, и 12 записей на год, а не 1.
чо?
всмысле не могли бы вы конкретизировать своё мнение? если быть точным, то я не понял ни процента смысла вашего высказывания

ну перечитай еще раз...
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931246
Коддов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv нарушение первой нормальной формы ,
нужно перепроектировать бд, должна быть одна сумма и плюс месяц в первичный ключь, и 12 записей на год, а не 1.нуу, ващет не первой ...
а так - "да", у ТС явный "Эксель головного мозга" и таблица, "криком кричит" - требует нормализации
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931248
S_Layer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тоесть структуру устроить вместо 1 строки с 6ю айдишниками и 12ю суммами по месяцам сделать 6 айдишников, сумму и номер месяца?
а потом при вносе данных делать 12 запросов? вносятся данные исключительно все 12 месяцев за раз.
а потом, когда найдется решение вышестоящей проблемы, то еще 12 запросов, если надо всего одну такую строчку добавить. а если их 5 - то предлагаете делать 60 запросов на 1 клик пользователя?) имхо, милейший, это бред.
я с такой структуры начал, потом понял что нужно всетаки именно так, как описано в вопросе.
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931253
Коддов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
S_Layer,

где 6ть айдишников?
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931256
S_Layer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в структуре таблицы у меня 1st_id, 2nd_id, 3rd_id, 4rd_id, 5th_id, 6th_id
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931259
Коддов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
S_Layerв структуре таблицы у меня 1st_id, 2nd_id, 3rd_id, 4rd_id, 5th_id, 6th_idИи? в чём смысл этих 6ти айдишников?
Значения М1-М12 для них, что одинаковые?
Если для них смысл есть, как для отдельных сущностей (в чём я сильно сомневаюсь), то это ГРУППА, которой будет присвоен свой ИД, и ИД этой группы и будет использоваться в таб.
id_gr M Value
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931265
S_Layer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну коль с образным мышлением не получается, давайте придумаем подходящий поясняющий аналоговый пример.
скажем, country_id, city_id, street_id и 12 полей с месяцами, в которые вносятся итоговые суммы по аренде за каждый месяц отдельно.
может так понятнее строение таблицы.
так вот, у меня структура почти такая же, только без привязок одного к другому. абстрактная "улица" с айдишником 12 может быть в любом городе, в любой из стран.

и вот скажем мне надо добавить строку с улицей "Дерибасовская", находящаяся во Франции, в Городе Ламумба, а значение полей 12-ти месяцев должно сложиться из значений полей тех же месяцев (март+март, август+август) улиц "Брайтон Бич" и "5ая Авеню", в той же Франции, в том же Ламумба.

весьма странный пример, но точно описывает структуру моей таблицы.

(а по предложению многоуважаемого MasterZiv эта операция будет делать минимум(!) 12 запросов)

по вообще абстрактному объяснению - езжайте во Францию, город Ламумба, возьмите из холодильника на Брайтон Бич кусок колбасы, возьмите из холодильника на 5й Авеню хлеба шматок и на улице Дерибасовская в холодильник положите получившийся бутерброд. что-то меня несёт по-страшному)))))))))))))) не читайте этот абзац-бред
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931269
S_Layer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
*немного подумав*
двумя запросами я всегда успею это сделать:
Код: sql
1.
SELECT * FROM mytable WHERE 2nd_id=85 AND 3rd_id=80 AND 4rd_id=74 AND 5th_id=14 AND 6th_id=33 AND (1st_id=5 OR 1st_id=6)


получаем две строки. складываем каждый из месяцев попарно и результат засовываем в таблицу
Код: sql
1.
INSERT INTO mytable (1st_id, 2nd_id, 3rd_id, 4rd_id, 5th_id, 6th_id, M1, M2, ... M12) VALUES (7, 85, 80, 74, 14, 33, сумма_января, сумма_февраля, ... сумма_декабря)


но как упростить это до одного запроса?...

(а по предложению многоуважаемого MasterZiv эта операция будет делать 13 запросов (1 на выборку 24х строк и 12 INSERT'ов))
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931270
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_LayerвадяWHERE id in(1,3,5,8)не! это пригодится если надо 4 строки с этими айдишниками сбивать в кучку. а я имел ввиду, что на самом деле у меня строение таблицы примерно следующее (в месяцах там деньги, некие суммы денег):
Код: plaintext
1.
2.
 id   1st_id  2nd_id  3rd_id  4rd_id  5th_id  6th_id      month1        month2        month3  month4  month5  month6  month7  month8  month9  month10  month11  month12
1       5       85       80      74      14      33         1563,45       457,43        546,23  45,00   523,03  1563,45 457,43  546,23   45,00  54523,03 6765,43   23,23
2       6       85       80      74      14      33          62,25        127,54        842,15  55,55   221,13  1611,11 252,12 1642,53  332,10   223,18 3725,13    23,23
таких строк там более тыщи, есстесственно айдишники разные и в разных комбинациях.
и вот надо теперь добавить вот какую строку
Код: plaintext
1.
1001    7       85       80      74      14      33    (1563,45+62,25) (457,43+127,54)
тоесть фактически меняется только поле 1st_id и все значения всех месяцевЧто-то Вы сами себе противоречите. Это суммирование разве не есть "сбивание в кучу"?

Код: sql
1.
2.
3.
INSERT INTO mytable (1st_id, 2nd_id, 3rd_id, ... , month1, month2, ...)
  SELECT 7, MIN(2nd_id), MIN(3rd_id), ... , SUM(month1), SUM(month2), ...
  WHERE id IN (1,2)



P.S. MasterZiv, кстати, скорее всего прав насчет реорганизации таблицы. Тогда запрос был в разы короче и проще.
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931271
Коддов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
S_Layerну коль с образным мышлением не получается, давайте придумаем подходящий поясняющий аналоговый пример.
скажем, country_id, city_id, street_id и 12 полей с месяцами, в которые вносятся итоговые суммы по аренде за каждый месяц отдельно.
может так понятнее строение таблицы.
так вот, у меня структура почти такая же, только без привязок одного к другому. абстрактная "улица" с айдишником 12 может быть в любом городе, в любой из стран.

и вот скажем мне надо добавить строку с улицей "Дерибасовская", находящаяся во Франции, в Городе Ламумба, а значение полей 12-ти месяцев должно сложиться из значений полей тех же месяцев (март+март, август+август) улиц "Брайтон Бич" и "5ая Авеню", в той же Франции, в том же Ламумба.

весьма странный пример, но точно описывает структуру моей таблицы.

(а по предложению многоуважаемого MasterZiv эта операция будет делать минимум(!) 12 запросов)

по вообще абстрактному объяснению - езжайте во Францию, город Ламумба, возьмите из холодильника на Брайтон Бич кусок колбасы, возьмите из холодильника на 5й Авеню хлеба шматок и на улице Дерибасовская в холодильник положите получившийся бутерброд. что-то меня несёт по-страшному)))))))))))))) не читайте этот абзац-бредЭээ, нет, коллега :)
С аналогией стало только хуже ...

"Аналогия" - четко иерархическая, и просто обязанна быть нормализованна

Страны ==> ГородаСтран ==> УлицыГородовСтран ==> ТаТаблицаПроКоторуюРечь

ТаТаблицаПроКоторуюРечь, с полями
ид_УлицыГородовСтран М Значение
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931273
S_Layer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftЧто-то Вы сами себе противоречите. Это суммирование разве не есть "сбивание в кучу"?
да, тут я попутался. наверное это можно както приложить

miksoftINSERT INTO mytable (1st_id, 2nd_id, 3rd_id, ... , month1, month2, ...)
SELECT 7, MIN(2nd_id), MIN(3rd_id), ... , SUM(month1), SUM(month2), ...
WHERE id IN (1,2)
SELECT 7 - это так писать айдишник новой записи?)
а почему MIN(2nd_id), MIN(3rd_id)? это что даст? ну тут щас сам подумаю на что заменить.

мысли вроде бы получили вектор. ушел в себя, думать...

miksoftP.S. MasterZiv, кстати, скорее всего прав насчет реорганизации таблицы. Тогда запрос был в разы короче и проще.... и в разы их (запросов) больше
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931278
S_Layer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
INSERT INTO mytable (1st_id, 2nd_id, 3rd_id, 4th_id, 6th_id, month1, month2, month3, ... month12) SELECT 7, 2nd_id, 3rd_id, 4th_id, 5th_id, 6th_id, SUM(month1), SUM(month2), SUM(month3), ... SUM(month12) FROM `budget_cf_base` WHERE 1st_id IN (5,6) AND 2nd_id=88 AND 3rd_id=80 AND 4rd_id=74 AND 5th_id=14 AND 6th_id=33



прекраснейшее решение! СПАСИБО!
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931279
S_Layer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
только 5чку там пропустил...
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931294
S_Layer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я всегда знал две вещи: нет предела извращениям и мозг варит ночью лучше.
усложняем задачу: теперь нам надо не сложить 2 этих значения, а, например, вычесть одно из другого или, например, умножить или даже разницу высчитать.
и вот решение!
Код: sql
1.
2.
3.
4.
5.
6.
INSERT INTO mytable (1st_id, 2nd_id, 3rd_id, 4rd_id, 5th_id, 6th_id, month1, month2, month3, ... month12)
 SELECT 1, 2, 3, 4, 5, 6, t1.month1-t2.month1, t1.month2-t2.month2, t1.month3-t2.month3, ... t1.month12-t2.month12
 FROM mytable AS t1
 LEFT JOIN mytable AS t2 ON 1=1
 WHERE t1.1st_id=666 AND t1.2nd_id=2 AND t1.3rd_id=3 AND t1.4rd_id=4 AND t1.5th_id=5 AND t1.6th_id=6
 AND t2.1st_id=999 AND t2.2nd_id=2 AND t2.3rd_id=3 AND t2.4rd_id=4 AND t2.5th_id=5 AND t2.6th_id=6


там где написано ON 1=1 явно можно написать 1 или true или еще что-то, но без ON как таковой оно не хочет работать.
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931301
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Layerам где написано ON 1=1 явно можно написать 1 или true или еще что-то,а ещё там можно написать cross jоin
или вообще написать inner join и убрать условия связывания из where туда, где им самое место
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931417
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_LayermiksoftP.S. MasterZiv, кстати, скорее всего прав насчет реорганизации таблицы. Тогда запрос был в разы короче и проще.... и в разы их (запросов) большеНасколько я понял его мысль - один запрос так и останется.
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931777
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КоддовMasterZiv нарушение первой нормальной формы ,
нужно перепроектировать бд, должна быть одна сумма и плюс месяц в первичный ключь, и 12 записей на год, а не 1.нуу, ващет не первой ...

Именно первой.
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931782
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Layerтоесть структуру устроить вместо 1 строки с 6ю айдишниками и 12ю суммами по месяцам сделать 6 айдишников, сумму и номер месяца?


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
create table DDDD
(
id int not null,
month int not null,
M numeric(20) not null,

constraint PK_DDDD primary key (id, month)
);




S_Layerа потом при вносе данных делать 12 запросов? вносятся данные исключительно все 12 месяцев за раз.


Да. Это не имеет значения, сколько будет запросов вставки.

S_Layerа потом, когда найдется решение вышестоящей проблемы, то еще 12 запросов, если надо всего одну такую строчку добавить. а если их 5 - то предлагаете делать 60 запросов на 1 клик пользователя?) имхо, милейший, это бред.
я с такой структуры начал, потом понял что нужно всетаки именно так, как описано в вопросе.

Ну, успехов в работе, как говорится. Я сделал всё, что мог.
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931786
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivКоддовпропущено...
нуу, ващет не первой ...

Именно первой.И где же там несколько значений в одном поле?
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931791
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
create table DDDD
(
id int not null,
month int not null,
M numeric(20) not null,

constraint PK_DDDD primary key (id, month)
);



автортеперь нужно внести некую новую строку, в которой мне нужно получить сумму записей по каждому из месяцев с id, например, 1 и с id, например, 2.

Код: sql
1.
2.
3.
4.
insert into ... ()
select id, month, sum(M)
where id in (1,2)
grooup by id, month;



Только тут ты что-то темнишь, потому что с конкретным ID и за конкретный месяц будет только одна запись -- суммировать нечего.

Возможно, имелось в виду

Код: sql
1.
2.
3.
4.
insert into ... ()
select month, sum(M)
where id in (1,2)
grooup by month;



Ну тогда так.
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931837
Коддов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftMasterZivпропущено...


Именно первой.И где же там несколько значений в одном поле?
+1
присоединяюсь к вопросу
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38931941
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коддовmiksoftпропущено...
И где же там несколько значений в одном поле?
+1
присоединяюсь к вопросу

M1, M2, M3 ... M12 -- это на самом деле одно поле, массив.

В РСУБД есть два (хотя может быть есть и ещё) способа изобразить неатомарное поле (массив):
хранить в одном поле (символьном) много значений через разделитель ('42,43,44,45') (длинна массива переменная)

хранить много значений в разных полях одной записи, имена полей индексировать (всё как в примере) (длина массива фиксированная).

Можно ещё хранить в поле XML, JSON, и всё подобное.

Это всё -- нарушение 1-ой нормальной формы отношения.

Это не страшно , если данные внутри этого поля не обрабатываются внутри БД (т.е. запросами).
Но если будет попытка обработки внутри БД -- это будет никак не сделать средствами SQL.
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38932054
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivM1, M2, M3 ... M12 -- это на самом деле одно поле, массив.Откуда это следует? Если только из неумения топикстартера оформлять свои посты, не более того.

Причем из его
S_Layer
Код: sql
1.
SUM(month1), SUM(month2), SUM(month3), ... SUM(month12)

следует, что это таки отдельные поля.
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38932168
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftMasterZivM1, M2, M3 ... M12 -- это на самом деле одно поле, массив.Откуда это следует? Если только из неумения топикстартера оформлять свои посты, не более того.

Блин, если бы не ты это спрашивал, я бы не был удивлён, но ты-то мог бы и догадаться.
У этих полей ОДНО И ТО ЖЕ НАЗНАЧЕНИЕ.
Это по сути -- массив полей.

Ребята, я на самом деле устал немного букварные истины вам тут вещать, это же из первых лекций по теории РБД...
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38932176
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftMasterZivM1, M2, M3 ... M12 -- это на самом деле одно поле, массив.Откуда это следует? Если только из неумения топикстартера оформлять свои посты, не более того.

Причем из его
S_Layer
Код: sql
1.
SUM(month1), SUM(month2), SUM(month3), ... SUM(month12)

следует, что это таки отдельные поля.

Я не оспариваю, что в его БД это не отдельные поля.
Я говорю о том, что логически в его БД -- это одно поле, массив. Физически -- набор полей, чьи имена проиндексированы
(содержат индекс элемента как часть имени поля).
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38932225
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivРебята, я на самом деле устал немного букварные истины вам тут вещать, это же из первых лекций по теории РБД...Да и не надо. Кроме топикстартера никто и не возражал, что таблице просится перепроектирование. И, скорее всего, не только этой таблице.


MasterZivУ этих полей ОДНО И ТО ЖЕ НАЗНАЧЕНИЕ.Я бы не был так уверен, исходя из увлечения топистартером "образным мышлением".

Предлагаю не пытаться разглядеть пророчества в чаинках, а то так можно и Грима нагадать. :)
...
Рейтинг: 0 / 0
массовое изменение значений ячеек
    #38932389
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft
MasterZivУ этих полей ОДНО И ТО ЖЕ НАЗНАЧЕНИЕ.Я бы не был так уверен, исходя из увлечения топистартером "образным мышлением".


Напомню, он ещё их суммировать хотел, эти поля.
...
Рейтинг: 0 / 0
32 сообщений из 32, показаны все 2 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / массовое изменение значений ячеек
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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