Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / массовое изменение значений ячеек / 25 сообщений из 32, страница 1 из 2
08.04.2015, 22:00:10
    #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
08.04.2015, 22:05:10
    #38931185
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
массовое изменение значений ячеек
S_Layer,

Код: sql
1.
WHERE id in(1,3,5,8)
...
Рейтинг: 0 / 0
08.04.2015, 22:50:18
    #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
08.04.2015, 23:07:40
    #38931209
S_Layer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
массовое изменение значений ячеек
MasterZivнарушение первой нормальной формы,
нужно перепроектировать бд, должна быть одна сумма и плюс месяц в первичный ключь, и 12 записей на год, а не 1.
чо?
всмысле не могли бы вы конкретизировать своё мнение? если быть точным, то я не понял ни процента смысла вашего высказывания
...
Рейтинг: 0 / 0
08.04.2015, 23:25:13
    #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
09.04.2015, 00:07:03
    #38931243
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
массовое изменение значений ячеек
S_LayerMasterZivнарушение первой нормальной формы,
нужно перепроектировать бд, должна быть одна сумма и плюс месяц в первичный ключь, и 12 записей на год, а не 1.
чо?
всмысле не могли бы вы конкретизировать своё мнение? если быть точным, то я не понял ни процента смысла вашего высказывания

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

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

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

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

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

по вообще абстрактному объяснению - езжайте во Францию, город Ламумба, возьмите из холодильника на Брайтон Бич кусок колбасы, возьмите из холодильника на 5й Авеню хлеба шматок и на улице Дерибасовская в холодильник положите получившийся бутерброд. что-то меня несёт по-страшному)))))))))))))) не читайте этот абзац-бред
...
Рейтинг: 0 / 0
09.04.2015, 01:17:11
    #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
09.04.2015, 01:19:00
    #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
09.04.2015, 01:27:11
    #38931271
Коддов
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
массовое изменение значений ячеек
S_Layerну коль с образным мышлением не получается, давайте придумаем подходящий поясняющий аналоговый пример.
скажем, country_id, city_id, street_id и 12 полей с месяцами, в которые вносятся итоговые суммы по аренде за каждый месяц отдельно.
может так понятнее строение таблицы.
так вот, у меня структура почти такая же, только без привязок одного к другому. абстрактная "улица" с айдишником 12 может быть в любом городе, в любой из стран.

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

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

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

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

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

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

ТаТаблицаПроКоторуюРечь, с полями
ид_УлицыГородовСтран М Значение
...
Рейтинг: 0 / 0
09.04.2015, 01:48:21
    #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
09.04.2015, 02:15:55
    #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
09.04.2015, 02:17:27
    #38931279
S_Layer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
массовое изменение значений ячеек
только 5чку там пропустил...
...
Рейтинг: 0 / 0
09.04.2015, 04:21:59
    #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
09.04.2015, 05:01:56
    #38931301
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
массовое изменение значений ячеек
S_Layerам где написано ON 1=1 явно можно написать 1 или true или еще что-то,а ещё там можно написать cross jоin
или вообще написать inner join и убрать условия связывания из where туда, где им самое место
...
Рейтинг: 0 / 0
09.04.2015, 09:23:08
    #38931417
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
массовое изменение значений ячеек
S_LayermiksoftP.S. MasterZiv, кстати, скорее всего прав насчет реорганизации таблицы. Тогда запрос был в разы короче и проще.... и в разы их (запросов) большеНасколько я понял его мысль - один запрос так и останется.
...
Рейтинг: 0 / 0
09.04.2015, 12:36:10
    #38931777
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
массовое изменение значений ячеек
КоддовMasterZiv нарушение первой нормальной формы ,
нужно перепроектировать бд, должна быть одна сумма и плюс месяц в первичный ключь, и 12 записей на год, а не 1.нуу, ващет не первой ...

Именно первой.
...
Рейтинг: 0 / 0
09.04.2015, 12:40:05
    #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
09.04.2015, 12:42:09
    #38931786
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
массовое изменение значений ячеек
MasterZivКоддовпропущено...
нуу, ващет не первой ...

Именно первой.И где же там несколько значений в одном поле?
...
Рейтинг: 0 / 0
09.04.2015, 12:45:43
    #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
Форумы / MySQL [игнор отключен] [закрыт для гостей] / массовое изменение значений ячеек / 25 сообщений из 32, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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