|
Массовый UPDATE двух таблиц
|
|||
---|---|---|---|
#18+
Здравствуйте форумчане! Есть две таблицы - 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') Подскажите люди добрые, как можно обновить данные? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2021, 10:35 |
|
Массовый UPDATE двух таблиц
|
|||
---|---|---|---|
#18+
RustHrust как мне через insert вставить в две разные таблицы эти данные? Никак. Один INSERT вставляет только в одну таблицу. Хочешь вставлять в две - делай два INSERT, хоть по отдельности, хоть из одной хранимой процедуры (что с точки зрения вызывающей программы будет один запрос). Вернее, способ есть, но он однозначно поломает любые другие попытки вставки, кроме вот этой парной вставки. Да и не всегда он применим, ибо накладывает определённые требования на структуру таблицы. А потому даже рассказывать про него не стану - нет смысла. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2021, 10:50 |
|
Массовый UPDATE двух таблиц
|
|||
---|---|---|---|
#18+
Akina, А с помощью UPDATE? Ну как-то же импортируют из прайса данные в бд? Просто вся сложность в том, что две таблицы, было бы в одной - было бы проще... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2021, 11:01 |
|
Массовый UPDATE двух таблиц
|
|||
---|---|---|---|
#18+
UPDATE никуда ничего не вставляет, он изменяет данные в уже имеющихся записях. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2021, 11:04 |
|
Массовый UPDATE двух таблиц
|
|||
---|---|---|---|
#18+
Akina, Да, не правильно выразился))) Данные нужно обновить! ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2021, 11:07 |
|
Массовый UPDATE двух таблиц
|
|||
---|---|---|---|
#18+
А теперь представьте себя не капризным подростком с "я хочу", а вменяемым постановщиком задачи. И совершенно чётко поставьте эту самую задачу. Для чего выложите: 1. Структуры таблиц. В виде качественно отформатированных CREATE TABLE скриптов (в теге SRC, см. панель над полем ввода ответа и кнопку "Просмотр" под ним). 2. Пример содержимого таблиц (по 3-5 записей на таблицу, в виде отформатированных INSERT INTO). 3. Исходную информацию, подлежащую внесению в таблицы (в более-менее вменяемом виде, как plain text, CSV, валидный JSON или ещё как - в общем, в том виде, в каком оно может быть передано на MySQL для выполнения операции). 4. Требуемое финальное состояние данных в таблицах (для перечисленных выше исходных данных). С подробным пояснением, что и куда попало, и почему именно так. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2021, 12:02 |
|
Массовый UPDATE двух таблиц
|
|||
---|---|---|---|
#18+
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.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Таблица modification: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Остальное выше указал. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2021, 12:40 |
|
Массовый UPDATE двух таблиц
|
|||
---|---|---|---|
#18+
Отлично, половина есть. Изобразим её вот в такой форме: fiddle . А вот дальше менее понятно. Во-первых, исходные данные для не то добавления, не то обновления. Про array of array даже говорить не буду - с точки зрения MySQL это какая-то белиберда. То же, что в конце, а именно RustHrust содержимое $str такое: Код: plaintext 1.
более понятно, но всё равно не проясняет ситуации. Это что показано - два разных значения? или это одно значение такое? опять же - судя по имени, это PHP-переменная, но где ограничивающие значение кавычки? почему набор значений ограничивают скобки? И - допустим, это значение применено к имеющимся в таблицах правильно, так, как надо - что после этого должно получиться в таблицах-то? Где требуемое финальное состояние данных в таблицах? не говоря уж о пояснениях... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2021, 12:58 |
|
Массовый UPDATE двух таблиц
|
|||
---|---|---|---|
#18+
Akina, Ссори, чуть позже выложу все правильно и подробно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2021, 13:27 |
|
Массовый UPDATE двух таблиц
|
|||
---|---|---|---|
#18+
Итак, вот правильный дамп таблиц: 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.
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.
Данные из excel приходят в таком виде (это содержимое переменной [b]$str из запроса ниже.):[/b] Код: php 1.
это уже преобразованные в строку данные, для запроса в бд mysql. Вот сам код запроса на вставку, этот код именно обновляет , а не вставляет данные, что мне и нужно! Код: php 1. 2. 3. 4. 5. 6. 7.
а вот содержимое переменной $fields из запроса выше: Код: php 1.
и это тоже строка. Могу конечно не обработанные, исходный массив выложить: Код: 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.
Если еще какие то данные нужны вы скажите. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2021, 19:50 |
|
Массовый UPDATE двух таблиц
|
|||
---|---|---|---|
#18+
То ли задачка сложная, то ли не интересная...(: ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 11:04 |
|
Массовый UPDATE двух таблиц
|
|||
---|---|---|---|
#18+
Ну я лично ни хрена не понимаю. Вот всё вышеперечисленное в последней версии: fiddle А теперь объясни - о каком обновлении идёт речь, если данные, поставляемые извне (те, которые приходят из Excel) стопроцентно совпадают с тем, что уже имеется в таблицах? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 11:21 |
|
Массовый UPDATE двух таблиц
|
|||
---|---|---|---|
#18+
Если допустить, что данные могут быть произвольны, я вижу кучу разных вариантов исходных данных. Блок данных для таблицы 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, разделитель значений полей запятая, первая строка - имена полей). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 11:35 |
|
Массовый UPDATE двух таблиц
|
|||
---|---|---|---|
#18+
Да, данные совпадают, все верно))) это потому, что я просто в эксель не ввел новые значения, согласен, непонятно. Суть: в админке генерируется эксель файл с данными из этих двух таблиц, затем файл скачивается и в нем меняются данные (в основном цены, остальные данные нужны что бы понимать у кого и где ты меняешь цену), затем файл загружается в бд с измененными данными... вот как-то так... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 11:50 |
|
Массовый UPDATE двух таблиц
|
|||
---|---|---|---|
#18+
Сам код 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 11:52 |
|
Массовый UPDATE двух таблиц
|
|||
---|---|---|---|
#18+
Вот, развлекайся. fiddle . PHP - просто передаёт данные, всё необходимое выполняет процедура. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 13:09 |
|
Массовый UPDATE двух таблиц
|
|||
---|---|---|---|
#18+
я так понимаю что из всего перечисленного, мне подходит вот это?... Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Только тут получается вставляются новые записи, а мне нужно старые обновить, к примеру было price=200, пришло price=300, соотв. просто заменить 200 на 300. Я не очень силен в sql запросах, можешь объяснить что значит запись: CALL insert_or_update ? Это встроенная ф-ция в mysql? Как мне в рамках моего кода ее использовать? При условии что запросы пишутся с использованием библиотеки RedBeanPHP? Она подразумевает конечно "произвольные" запросы типа SELECT UPDATE DELETE INSERT через свою встроенную ф-цию \R::exec(); но не понимаю как твой код применить сюда? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 15:14 |
|
Массовый UPDATE двух таблиц
|
|||
---|---|---|---|
#18+
Я могу подсказать. Я могу дать частичное решение. Или даже окончательное решение. Но вот обучать основам SQL с самого нуля, потому что Вы не можете понять ответ по причине отсутствия каких-либо знаний, я точно не буду. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 16:34 |
|
Массовый UPDATE двух таблиц
|
|||
---|---|---|---|
#18+
авторЯ могу подсказать. Я могу дать частичное решение. Или даже окончательное решение. Было бы неплохо, в рамках твоего настроения написать один из вариантов. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 16:50 |
|
Массовый UPDATE двух таблиц
|
|||
---|---|---|---|
#18+
В приведённом мной fiddle есть полное решение задачи на стороне MySQL. Со стороны PHP осталось только подготовить данные (да собсно это уже эксель всё сделал - осталось прочитать из файла) и вызвать процедуру, правильно передав ей параметры. Всё. Как это делать в PHP - на спрашивай, не использую. Тем более фреймворки. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 16:58 |
|
Массовый UPDATE двух таблиц
|
|||
---|---|---|---|
#18+
Это не подсказка, это издевательство... Угадай, какой из трех цветов используется в тканях Луиза Альберта из Сингапура? Даю подсказку - этот цвет, любимый цвет мамы Бориса Моисеева! ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 17:31 |
|
Массовый UPDATE двух таблиц
|
|||
---|---|---|---|
#18+
Почитал немного о хранимых процедурах, внедрить одну запись удалось, а вот пакетом - ругается phpmyadmin, только не пойму на что? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2021, 14:06 |
|
|
start [/forum/topic.php?fid=47&msg=40098618&tid=1827943]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
5ms |
track hit: |
176ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 243ms |
total: | 532ms |
0 / 0 |