Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Обновление записей таблицы по сложному условию
|
|||
|---|---|---|---|
|
#18+
Добрый день Есть задача обновить некий признак сущности sku который отвечает за основную запись в случае возникновения дублей с размерами. Есть таблица sku c полями: id product_id is_active sale_price is_main_auto size_code is_active Есть таблица с sku_store - связка магазинов с sku store_id quantity sku_id Есть таблица store id active Написал запрос, который (в теории) должен пробежаться по всем записям таблицы и проставить признак is_main_auto в 0 или 1 в зависимости от результата условия Код: 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. Результат выполнения этого запроса - всем записям а таблице sku поле is_main_auto проставляется в 0 Если выполнить запрос, результат который я присваиваю в разделе "UPDATE" полю is_main_auto, с подставленными значениями из реальной таблицы (sku.id, sku.product_id и т.д.) тода возвращается правильный положительный ответ. Подскажите пожалуйста, правильный ли я подход выбрал для решения задачи? И если это можно назвать решением, то как сделать так чтобы оно работало. Спасибо большое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 18:04 |
|
||
|
Обновление записей таблицы по сложному условию
|
|||
|---|---|---|---|
|
#18+
ndashutinНаписал запрос, который (в теории) должен пробежаться по всем записям таблицы и проставить признак is_main_auto в 0 или 1 в зависимости от результата условия Код: sql 1. А Вы знаете, что запрос INSERT вставляет новую запись, а не обновляет существующую? А поскольку Вы вставляете в т.ч. и значение поля ID (как я понимаю, это уник, иначе вообще дурь получается), то у Вас ГАРАНТИРОВАННО дубль, т.е. гарантированный ODKU, и геморрой с INSERT-частью тупо лишний. К сожалению, вопрос - "ниачём". Выбросите свои попытки, и формулируйте исходную задачу. На развёрнутой плоской структуре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 20:11 |
|
||
|
Обновление записей таблицы по сложному условию
|
|||
|---|---|---|---|
|
#18+
Перед тем как приступать к задаче я нагуглил советы использования конструкций Код: sql 1. Почитав вот это https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html И вот эту https://stackoverflow.com/questions/3432/multiple-updates-in-mysql статью на stackoverflow которая наталкнула меня на подобное решение Поправте меня если я не прав, пожалуйста Конструкция INSERT ODKU пытается вставить в таблицу перечень значений. В случае дублирования записи первичного ключа - можно указать нвое значения для перечня полей текущей записи (часть после ... UPDATE)? При этом в подзапросах можно использовать такие выражения как VALUES(var_name) которые берутся из текущей обновляемой строчки? Или у меня совершенно неверное понимание о том, как работет эта конструкция? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 22:47 |
|
||
|
Обновление записей таблицы по сложному условию
|
|||
|---|---|---|---|
|
#18+
AkinandashutinНаписал запрос, который (в теории) должен пробежаться по всем записям таблицы и проставить признак is_main_auto в 0 или 1 в зависимости от результата условия Код: sql 1. А Вы знаете, что запрос INSERT вставляет новую запись, а не обновляет существующую? Конечно знаю. Я копирую таблицу sku в эту же таблицу чтобы гарантировано получить ODKU и обновить поле is_main_auto. При этом имею доступ к полям текущей записи. Такая себе итерация, или не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 23:10 |
|
||
|
Обновление записей таблицы по сложному условию
|
|||
|---|---|---|---|
|
#18+
ndashutinВ случае дублирования записи первичного ключа - можно указать нвое значения для перечня полей текущей записи (часть после ... UPDATE)? При этом в подзапросах можно использовать такие выражения как VALUES(var_name) которые берутся из текущей обновляемой строч1) Любого уника, не только первичного. 2) Всё то же доступно и в обычном UPDATE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2018, 13:44 |
|
||
|
Обновление записей таблицы по сложному условию
|
|||
|---|---|---|---|
|
#18+
[quot Akina]ndashutin2) Всё то же доступно и в обычном UPDATE. Я об этом не знал. А можно примерчик симпл симпл Спасибо огромное ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2018, 17:07 |
|
||
|
Обновление записей таблицы по сложному условию
|
|||
|---|---|---|---|
|
#18+
Примерчик ЧЕГО??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2018, 22:12 |
|
||
|
Обновление записей таблицы по сложному условию
|
|||
|---|---|---|---|
|
#18+
Akina Примерчик ЧЕГО??? Понял что задал глупый вопрос Из размышлений: Понял что запрос можно переписать простым UPDATE. Дело в том, что sql переносил из кода. И естественно переносил подзапросами. Понял что для начала можно написать SELECT запрос с применением всех условий. Запрос должен вернуть все записи таблицы которым теоретически можно присвоить is_main_auto = true Дальше основываясь на этих условиях выполнить UPDATE В лоб не понимал как выполнить эту задачу. В раздумиях и с вашего пинка пошел другим путем и все разложилось по полочкам Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2018, 13:09 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39667774&tid=1829756]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 143ms |

| 0 / 0 |
