powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Массовый UPDATE двух таблиц
25 сообщений из 25, страница 1 из 1
Массовый UPDATE двух таблиц
    #40098606
RustHrust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте форумчане!
Есть две таблицы - product и modification.
Данные в таблицу приходят из прайса эксель в таком виде:

Array
(
[0] => Array
(
[title] => Коллектор MuoviTech
[alias] => kollektor-muovitech
[price] => 200
[old_price] => 100
[opt_price] => 300
[partner_price] => 400
[price_mod] => 600
[price_opt] => 300
[price_partner] => 200
)

[1] => Array
(
[title] => Коллектор Energeo
[alias] => kollektor-energeo
[price] => 100
[old_price] => 50
[opt_price] => 200
[partner_price] => 300
[price_mod] => 500
[price_opt] => 200
[price_partner] => 100
)
)

Первые 6 значений из одной таблицы:

[title] => Коллектор Energeo
[alias] => kollektor-energeo
[price] => 100
[old_price] => 50
[opt_price] => 200
[partner_price] => 300

остальные последние 3 из другой:

[price_mod] => 500
[price_opt] => 200
[price_partner] => 100

Вот как мне через insert вставить в две разные таблицы эти данные?
Мой запрос на вставку в одну таблицу (product) такой:

\R::exec("INSERT INTO product ($fields) VALUES $str ON DUPLICATE KEY UPDATE
alias=VALUES(alias),
title=VALUES(title),
price=VALUES(price),
opt_price=VALUES(opt_price),
partner_price=VALUES(partner_price)");

ON DUPLICATE KEY UPDATE - эта строчка (и далее) это из-за поля alias, оно у меня уникальное, и при вставке выдавало ошибку (duplicate key...), а с такой записью нет ошибок, в одну таблицу вставляется нормально.

содержимое $fields такое:

title,alias,price,old_price,opt_price,partner_price,price_mod,price_opt,price_partner

содержимое $str такое:

('Коллектор MuoviTech','kollektor-muovitech','200','100','300','400','600','300','200'),
('Коллектор Energeo','kollektor-energeo','100','50','200','300','500','200','100')

Подскажите люди добрые, как можно обновить данные?
...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40098613
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RustHrust
как мне через insert вставить в две разные таблицы эти данные?

Никак. Один INSERT вставляет только в одну таблицу. Хочешь вставлять в две - делай два INSERT, хоть по отдельности, хоть из одной хранимой процедуры (что с точки зрения вызывающей программы будет один запрос).

Вернее, способ есть, но он однозначно поломает любые другие попытки вставки, кроме вот этой парной вставки. Да и не всегда он применим, ибо накладывает определённые требования на структуру таблицы. А потому даже рассказывать про него не стану - нет смысла.
...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40098617
RustHrust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
А с помощью UPDATE? Ну как-то же импортируют из прайса данные в бд? Просто вся сложность в том, что две таблицы, было бы в одной - было бы проще...
...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40098618
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UPDATE никуда ничего не вставляет, он изменяет данные в уже имеющихся записях.
...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40098620
RustHrust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
Да, не правильно выразился)))
Данные нужно обновить!
...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40098639
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А теперь представьте себя не капризным подростком с "я хочу", а вменяемым постановщиком задачи. И совершенно чётко поставьте эту самую задачу. Для чего выложите:

1. Структуры таблиц. В виде качественно отформатированных CREATE TABLE скриптов (в теге SRC, см. панель над полем ввода ответа и кнопку "Просмотр" под ним).
2. Пример содержимого таблиц (по 3-5 записей на таблицу, в виде отформатированных INSERT INTO).
3. Исходную информацию, подлежащую внесению в таблицы (в более-менее вменяемом виде, как plain text, CSV, валидный JSON или ещё как - в общем, в том виде, в каком оно может быть передано на MySQL для выполнения операции).
4. Требуемое финальное состояние данных в таблицах (для перечисленных выше исходных данных). С подробным пояснением, что и куда попало, и почему именно так.
...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40098652
RustHrust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
Да без проблем.
Таблица product:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
--
-- Структура таблицы `product`
--

CREATE TABLE `product` (
  `id` int(10) UNSIGNED NOT NULL,
  `category_id` tinyint(3) UNSIGNED NOT NULL,
  `brand` varchar(50) NOT NULL,
  `title` varchar(255) NOT NULL,
  `alias` varchar(255) NOT NULL,
  `content` text,
  `price` float NOT NULL DEFAULT '0',
  `old_price` float NOT NULL DEFAULT '0',
  `opt_price` float NOT NULL DEFAULT '0',
  `partner_price` float NOT NULL DEFAULT '0',
  `status` enum('0','1') NOT NULL DEFAULT '1',
  `keywords` varchar(255) DEFAULT NULL,
  `description` varchar(255) DEFAULT NULL,
  `img` varchar(255) NOT NULL DEFAULT 'no_image.jpg',
  `hit` enum('0','1') NOT NULL DEFAULT '0',
  `articul` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
--
-- Дамп данных таблицы `product`
--

INSERT INTO `product` (`id`, `category_id`, `brand`, `title`, `alias`, `content`, `price`, `old_price`, `opt_price`, `partner_price`, `status`, `keywords`, `description`, `img`, `hit`, `articul`) VALUES
(1, 26, 'Aspol', 'Коллектор Energeo', 'kollektor-energeo', '<p>Распределительный Турбо-коллектор &ndash; это запатентованная технология спиральной нарезки традиционного гладкостенного зонда, который обладает, доказано лучшей теплопроводностью. Оборудование&nbsp;создает турбулентный поток, что приводит к снижению сопротивления.</p>\r\n\r\n<h2>Преимущества для конечных потребителей</h2>\r\n\r\n<p>Большая мощность распределительного коллектора дает высокий СОР (коэффициент энергоэффективности), а это реальная экономия для потребителей. Монтаж Турбо Коллектора не отличается от монтажа обычного зонда. Турбо коллектор прослужит долго, даже после нескольких замен тепловых насосов.</p>\r\n\r\n<p>Распределительные коллекторы поставляется с запорным клапаном и спускными клапанами на ответвлениях. Все распределительные коллекторы проверены под давлением в 5 баров на заводе изготовтеля.</p>\r\n', 100, 50, 200, 300, '1', 'ключевые слова', 'краткое описание', '95a1a0c1bb9a23c317e8ad187c5624eb.png', '1', 'GJ12J5XK49'),
(2, 27, 'Aspol', 'Коллектор MuoviTech', 'kollektor-muovitech', '<p>Распределительный Турбо-коллектор &ndash; это запатентованная технология спиральной нарезки традиционного гладкостенного зонда, который обладает, доказано лучшей теплопроводностью. Оборудование&nbsp;создает турбулентный поток, что приводит к снижению сопротивления.</p>\r\n\r\n<h2>Преимущества для конечных потребителей</h2>\r\n\r\n<p>Большая мощность распределительного коллектора дает высокий СОР (коэффициент энергоэффективности), а это реальная экономия для потребителей. Монтаж Турбо Коллектора не отличается от монтажа обычного зонда. Турбо коллектор прослужит долго, даже после нескольких замен тепловых насосов.</p>\r\n\r\n<p>Распределительные коллекторы поставляется с запорным клапаном и спускными клапанами на ответвлениях. Все распределительные коллекторы проверены под давлением в 5 баров на заводе изготовтеля.</p>\r\n', 200, 100, 300, 400, '1', 'ключевые слова', 'краткое описание', 'e9aa1a17b22376a01206e3eca0015bed.jpg', '1', '64KGCR94JDS8'),
(3, 26, 'Aspol', 'что-то', 'chto-to', '<p>xxzvzxc</p>\r\n', 300, 500, 400, 500, '1', 'zxczxc', 'zxczxc', 'no_image.jpg', '0', 'zxczxc');



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
--
-- Индексы таблицы `product`
--
ALTER TABLE `product`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `alias` (`alias`),
  ADD KEY `hit` (`hit`),
  ADD KEY `category_id` (`category_id`,`brand`) USING BTREE;

--
-- AUTO_INCREMENT для сохранённых таблиц
--

--
-- AUTO_INCREMENT для таблицы `product`
--
ALTER TABLE `product`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
COMMIT;



Таблица modification:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
--
-- Структура таблицы `modification`
--

CREATE TABLE `modification` (
  `id` int(10) UNSIGNED NOT NULL,
  `product_id` int(10) UNSIGNED NOT NULL,
  `title` varchar(255) NOT NULL,
  `price_mod` float NOT NULL DEFAULT '0',
  `price_opt` float NOT NULL DEFAULT '0',
  `price_partner` float NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
--
-- Дамп данных таблицы `modification`
--

INSERT INTO `modification` (`id`, `product_id`, `title`, `price_mod`, `price_opt`, `price_partner`) VALUES
(154, 2, '200 ватт', 600, 300, 200),
(160, 1, '100 ватт', 500, 200, 100),
(161, 1, 'vcxvxcv', 4545, 787, 78787),
(163, 3, 'что-то', 0, 0, 0);



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
--
-- Индексы таблицы `modification`
--
ALTER TABLE `modification`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT для сохранённых таблиц
--

--
-- AUTO_INCREMENT для таблицы `modification`
--
ALTER TABLE `modification`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=164;
COMMIT;



Остальное выше указал.
...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40098658
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отлично, половина есть. Изобразим её вот в такой форме: fiddle .

А вот дальше менее понятно. Во-первых, исходные данные для не то добавления, не то обновления. Про array of array даже говорить не буду - с точки зрения MySQL это какая-то белиберда. То же, что в конце, а именно
RustHrust
содержимое $str такое:

Код: plaintext
1.
('Коллектор MuoviTech','kollektor-muovitech','200','100','300','400','600','300','200'),
('Коллектор Energeo','kollektor-energeo','100','50','200','300','500','200','100')

более понятно, но всё равно не проясняет ситуации. Это что показано - два разных значения? или это одно значение такое? опять же - судя по имени, это PHP-переменная, но где ограничивающие значение кавычки? почему набор значений ограничивают скобки?

И - допустим, это значение применено к имеющимся в таблицах правильно, так, как надо - что после этого должно получиться в таблицах-то? Где требуемое финальное состояние данных в таблицах? не говоря уж о пояснениях...
...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40098666
RustHrust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
Ссори, чуть позже выложу все правильно и подробно.
...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40098792
RustHrust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Итак, вот правильный дамп таблиц:
product:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
--
-- Структура таблицы `product`
--

CREATE TABLE `product` (
  `id` int(10) UNSIGNED NOT NULL,
  `category_id` tinyint(3) UNSIGNED NOT NULL,
  `brand` varchar(50) NOT NULL,
  `title` varchar(255) NOT NULL,
  `alias` varchar(255) NOT NULL,
  `content` text,
  `price` float NOT NULL DEFAULT '0',
  `old_price` float NOT NULL DEFAULT '0',
  `opt_price` float NOT NULL DEFAULT '0',
  `partner_price` float NOT NULL DEFAULT '0',
  `status` enum('0','1') NOT NULL DEFAULT '1',
  `keywords` varchar(255) DEFAULT NULL,
  `description` varchar(255) DEFAULT NULL,
  `img` varchar(255) NOT NULL DEFAULT 'no_image.jpg',
  `hit` enum('0','1') NOT NULL DEFAULT '0',
  `articul` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

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

INSERT INTO `product` (`id`, `category_id`, `brand`, `title`, `alias`, `content`, `price`, `old_price`, `opt_price`, `partner_price`, `status`, `keywords`, `description`, `img`, `hit`, `articul`) VALUES
(1, 26, 'Aspol', 'Коллектор Energeo', 'kollektor-energeo', '<p>Распределительный Турбо-коллектор &ndash; это запатентованная технология спиральной нарезки традиционного гладкостенного зонда, который обладает, доказано лучшей теплопроводностью. Оборудование&nbsp;создает турбулентный поток, что приводит к снижению сопротивления.</p>\r\n\r\n<h2>Преимущества для конечных потребителей</h2>\r\n\r\n<p>Большая мощность распределительного коллектора дает высокий СОР (коэффициент энергоэффективности), а это реальная экономия для потребителей. Монтаж Турбо Коллектора не отличается от монтажа обычного зонда. Турбо коллектор прослужит долго, даже после нескольких замен тепловых насосов.</p>\r\n\r\n<p>Распределительные коллекторы поставляется с запорным клапаном и спускными клапанами на ответвлениях. Все распределительные коллекторы проверены под давлением в 5 баров на заводе изготовтеля.</p>\r\n', 100, 50, 200, 300, '1', 'ключевые слова', 'краткое описание', '95a1a0c1bb9a23c317e8ad187c5624eb.png', '1', 'GJ12J5XK49'),
(2, 27, 'Aspol', 'Коллектор MuoviTech', 'kollektor-muovitech', '<p>Распределительный Турбо-коллектор &ndash; это запатентованная технология спиральной нарезки традиционного гладкостенного зонда, который обладает, доказано лучшей теплопроводностью. Оборудование&nbsp;создает турбулентный поток, что приводит к снижению сопротивления.</p>\r\n\r\n<h2>Преимущества для конечных потребителей</h2>\r\n\r\n<p>Большая мощность распределительного коллектора дает высокий СОР (коэффициент энергоэффективности), а это реальная экономия для потребителей. Монтаж Турбо Коллектора не отличается от монтажа обычного зонда. Турбо коллектор прослужит долго, даже после нескольких замен тепловых насосов.</p>\r\n\r\n<p>Распределительные коллекторы поставляется с запорным клапаном и спускными клапанами на ответвлениях. Все распределительные коллекторы проверены под давлением в 5 баров на заводе изготовтеля.</p>\r\n', 200, 100, 300, 400, '1', 'ключевые слова', 'краткое описание', 'e9aa1a17b22376a01206e3eca0015bed.jpg', '1', '64KGCR94JDS8'),
(3, 26, 'Aspol', 'что-то', 'chto-to', '<p>xxzvzxc</p>\r\n', 300, 500, 400, 500, '1', 'zxczxc', 'zxczxc', 'no_image.jpg', '0', 'zxczxc');

--
-- Индексы сохранённых таблиц
--

--
-- Индексы таблицы `product`
--
ALTER TABLE `product`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `alias` (`alias`),
  ADD KEY `hit` (`hit`),
  ADD KEY `category_id` (`category_id`,`brand`) USING BTREE;

--
-- AUTO_INCREMENT для сохранённых таблиц
--

--
-- AUTO_INCREMENT для таблицы `product`
--
ALTER TABLE `product`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
COMMIT;


modification:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
--
-- Структура таблицы `modification`
--

CREATE TABLE `modification` (
  `id` int(10) UNSIGNED NOT NULL,
  `product_id` int(10) UNSIGNED NOT NULL,
  `title_mod` varchar(255) NOT NULL,
  `price_mod` float NOT NULL DEFAULT '0',
  `price_opt` float NOT NULL DEFAULT '0',
  `price_partner` float NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

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

INSERT INTO `modification` (`id`, `product_id`, `title_mod`, `price_mod`, `price_opt`, `price_partner`) VALUES
(164, 1, '6 секций', 500, 200, 100),
(165, 1, '7 секций', 4545, 787, 78787),
(166, 2, '8 секций', 600, 300, 200),
(167, 2, '9 секций', 800, 500, 200),
(168, 3, '10 секций', 1000, 900, 800),
(169, 3, '11 секций', 1200, 1100, 1000);

--
-- Индексы сохранённых таблиц
--

--
-- Индексы таблицы `modification`
--
ALTER TABLE `modification`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT для сохранённых таблиц
--

--
-- AUTO_INCREMENT для таблицы `modification`
--
ALTER TABLE `modification`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=170;
COMMIT;


Данные из excel приходят в таком виде (это содержимое переменной [b]$str из запроса ниже.):[/b]
Код: php
1.
('Коллектор Energeo','kollektor-energeo','100','50','200','300','6 секций','500','200','100'),('Коллектор Energeo','kollektor-energeo','100','50','200','300','7 секций','4545','787','78787'),('Коллектор MuoviTech','kollektor-muovitech','200','100','300','400','8 секций','600','300','200'),('Коллектор MuoviTech','kollektor-muovitech','200','100','300','400','9 секций','800','500','200'),('что-то','chto-to','300','500','400','500','10 секций','1000','900','800'),('что-то','chto-to','300','500','400','500','11 секций','1200','1100','1000')


это уже преобразованные в строку данные, для запроса в бд mysql.
Вот сам код запроса на вставку, этот код именно обновляет , а не вставляет данные, что мне и нужно!
Код: php
1.
2.
3.
4.
5.
6.
7.
\R::exec("INSERT INTO product ($fields) VALUES $str ON DUPLICATE KEY UPDATE
            title=VALUES(title),
            alias=VALUES(alias),
            price=VALUES(price),
            old_price=VALUES(old_price),
            opt_price=VALUES(opt_price),
            partner_price=VALUES(partner_price)");


а вот содержимое переменной $fields из запроса выше:
Код: php
1.
title,alias,price,old_price,opt_price,partner_price,title_mod,price_mod,price_opt,price_partner


и это тоже строка.
Могу конечно не обработанные, исходный массив выложить:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
Array
(
    [7] => Array
        (
            [title] => Коллектор Energeo
            [alias] => kollektor-energeo
            [price] => 100
            [old_price] => 50
            [opt_price] => 200
            [partner_price] => 300
            [title_mod] => 6 секций
            [price_mod] => 500
            [price_opt] => 200
            [price_partner] => 100
        )

    [8] => Array
        (
            [title] => Коллектор Energeo
            [alias] => kollektor-energeo
            [price] => 100
            [old_price] => 50
            [opt_price] => 200
            [partner_price] => 300
            [title_mod] => 7 секций
            [price_mod] => 4545
            [price_opt] => 787
            [price_partner] => 78787
        )

    [9] => Array
        (
            [title] => Коллектор MuoviTech
            [alias] => kollektor-muovitech
            [price] => 200
            [old_price] => 100
            [opt_price] => 300
            [partner_price] => 400
            [title_mod] => 8 секций
            [price_mod] => 600
            [price_opt] => 300
            [price_partner] => 200
        )

    [10] => Array
        (
            [title] => Коллектор MuoviTech
            [alias] => kollektor-muovitech
            [price] => 200
            [old_price] => 100
            [opt_price] => 300
            [partner_price] => 400
            [title_mod] => 9 секций
            [price_mod] => 800
            [price_opt] => 500
            [price_partner] => 200
        )

    [11] => Array
        (
            [title] => что-то
            [alias] => chto-to
            [price] => 300
            [old_price] => 500
            [opt_price] => 400
            [partner_price] => 500
            [title_mod] => 10 секций
            [price_mod] => 1000
            [price_opt] => 900
            [price_partner] => 800
        )

    [12] => Array
        (
            [title] => что-то
            [alias] => chto-to
            [price] => 300
            [old_price] => 500
            [opt_price] => 400
            [partner_price] => 500
            [title_mod] => 11 секций
            [price_mod] => 1200
            [price_opt] => 1100
            [price_partner] => 1000
        )

)


Если еще какие то данные нужны вы скажите.
...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40098907
RustHrust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То ли задачка сложная, то ли не интересная...(:
...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40098911
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну я лично ни хрена не понимаю.

Вот всё вышеперечисленное в последней версии: fiddle

А теперь объясни - о каком обновлении идёт речь, если данные, поставляемые извне (те, которые приходят из Excel) стопроцентно совпадают с тем, что уже имеется в таблицах?
...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40098916
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если допустить, что данные могут быть произвольны, я вижу кучу разных вариантов исходных данных.

Блок данных для таблицы product:

1а. Данные могут отсутствовать в product, и они должны быть вставлены
2а. Данные могут присутствовать в product, но требовать обновления
3а. Данные могут полностью соответствовать записи в product

Блок данных для таблицы modification:

1б. Данные могут отсутствовать в modification, и они должны быть вставлены
2б. Данные могут присутствовать в modification, но требовать обновления
3б. Данные могут полностью соответствовать записи в modification

При этом совместны пары: 1а1б, 2а1б, 2а2б, 2а3б, 3а1б, 3а2б, 3а3б.

Это - в теории. На практике некоторые сочетания могут не встречаться. Или пока не встречаться. Но предусмотреть надо обработку всех вариантов.

RustHrust
Если еще какие то данные нужны вы скажите.


Исходные данные в fiddle - есть. Вот теперь нужно - исходные данные "из Excel поставляемые" для каждого из семи вариантов, и финальное состояние данных в таблицах после применения всех изменений (данные сформировать так, чтобы последующее изменение не затирало предыдущих - изменяемых полей хватит). И состояние таблиц давайте не в виде array of array, а таблицей (тег форматирования Table, разделитель значений полей запятая, первая строка - имена полей).
...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40098922
RustHrust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, данные совпадают, все верно))) это потому, что я просто в эксель не ввел новые значения, согласен, непонятно.
Суть: в админке генерируется эксель файл с данными из этих двух таблиц, затем файл скачивается и в нем меняются данные (в основном цены, остальные данные нужны что бы понимать у кого и где ты меняешь цену), затем файл загружается в бд с измененными данными... вот как-то так...
...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40098923
RustHrust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сам код php для вставки в одну таблицу выглядит так (если нужно):
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
    public function insertExcel($arr) {
        $fields = '';
        unset($arr[2], $arr[3], $arr[4], $arr[5], $arr[6]);
        foreach($arr[7] as $key => $cell) {
            $fields .= $key.',';
        }
        $fields = trim($fields,',');
        $str = '';
        // INSERT INTO `product` (``,``,``..) VALUES ('','','',),(),(),();
        foreach($arr as $item) {
            $str .= "(";
            foreach($item as $cell) {
                $str .= "'".$cell."',";
            }
            $str = trim($str,",");
            $str .= "),";
        }
        $str = trim($str,",");
        \R::exec("INSERT INTO product ($fields) VALUES $str ON DUPLICATE KEY UPDATE
            title=VALUES(title),
            alias=VALUES(alias),
            price=VALUES(price),
            old_price=VALUES(old_price),
            opt_price=VALUES(opt_price),
            partner_price=VALUES(partner_price)");
        return;
    }
...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40098970
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, развлекайся. fiddle . PHP - просто передаёт данные, всё необходимое выполняет процедура.
...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40099023
RustHrust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я так понимаю что из всего перечисленного, мне подходит вот это?...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
-- Обновление обеих таблиц
CALL insert_or_update('New Title ver. 3', 'new_title', 1, 1, 1, 1, 'Mod 2', 2, 2, 2);

SELECT id, title, alias, price, old_price, opt_price, partner_price
FROM product;

SELECT id, product_id, title_mod, price_mod, price_opt, price_partner
FROM modification;


Только тут получается вставляются новые записи, а мне нужно старые обновить, к примеру было price=200, пришло price=300, соотв. просто заменить 200 на 300.
Я не очень силен в sql запросах, можешь объяснить что значит запись: CALL insert_or_update ? Это встроенная ф-ция в mysql?
Как мне в рамках моего кода ее использовать? При условии что запросы пишутся с использованием библиотеки RedBeanPHP? Она подразумевает конечно "произвольные" запросы типа SELECT UPDATE DELETE INSERT через свою встроенную ф-цию \R::exec(); но не понимаю как твой код применить сюда?
...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40099078
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я могу подсказать. Я могу дать частичное решение. Или даже окончательное решение. Но вот обучать основам SQL с самого нуля, потому что Вы не можете понять ответ по причине отсутствия каких-либо знаний, я точно не буду.
...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40099089
RustHrust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЯ могу подсказать. Я могу дать частичное решение. Или даже окончательное решение.
Было бы неплохо, в рамках твоего настроения написать один из вариантов.
...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40099093
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В приведённом мной fiddle есть полное решение задачи на стороне MySQL. Со стороны PHP осталось только подготовить данные (да собсно это уже эксель всё сделал - осталось прочитать из файла) и вызвать процедуру, правильно передав ей параметры. Всё. Как это делать в PHP - на спрашивай, не использую. Тем более фреймворки.
...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40099112
RustHrust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это не подсказка, это издевательство...
Угадай, какой из трех цветов используется в тканях Луиза Альберта из Сингапура?
Даю подсказку - этот цвет, любимый цвет мамы Бориса Моисеева!
...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40099286
RustHrust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почитал немного о хранимых процедурах, внедрить одну запись удалось, а вот пакетом - ругается phpmyadmin, только не пойму на что?
...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40099289
RustHrust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость


...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40099290
RustHrust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость

...
Рейтинг: 0 / 0
Массовый UPDATE двух таблиц
    #40099291
RustHrust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Массовый UPDATE двух таблиц
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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