Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Запись в БД (MySQL5.5+) с выбором Insert или Update и выборкой кодов с таблиц-справочников
|
|||
|---|---|---|---|
|
#18+
Добрый день. Приходит прайс в XML (точнее куча файлов по 100 записей (пока что, но будет где-то по 1000). Имеем такие данные: ИД (он же штрихкод), ИД категории товара (конфеты, фрукты, ...), Наименование, Количество, ИД единицы измерения (шт., гр., кг., ...), Цена, другая информация (много полей, в т.ч. с значениями со справочников). Категории товара и Единицы измерения приходят отдельным файлом. Это все "добро" нужно раскинуть в три таблицы (товары(catalog), Категории товаров(kategor) и Единицы измерения(ediz), по такому критерию - если такого товара еще нету в базе, то его нужно добавить, а если есть - обновить цену; то же самое с категориями и единицами измерения, но только нужно еще получить их ИД для подстановки при вставке записи о товаре. Самый простой вариант реализации (по записям): 1. Запрос на получение ИД категории товара. 2. Если пустой, тогда запрос на добавление категории + Получение ИД. 3. Получение ИД единицы измерения, 4. Если пустой - вставка + Получение ИД. ... n. Запрос на получение ИД товара n+1. Если пустой, то вставка, если не пустой - обновление. Можно еще сначала обновить все справочники, а потом пускать использовать подзапросы при вставке товаров. Но все это как-то громоздко и кажется мне не по феншую (к примеру применение ON DUPLICATE KEY UPDATE влечет за собой увеличение счетчика автоинкремента даже при обновлении записи). Собственно интересует механизм уменьшения запросов к БД без увеличения нагрузки. Примеры приветствуются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 02:36 |
|
||
|
Запись в БД (MySQL5.5+) с выбором Insert или Update и выборкой кодов с таблиц-справочников
|
|||
|---|---|---|---|
|
#18+
Death_RЕсли пустой, тогда запрос на добавление ... + получение ИД. INSERT ... ON DUPLICATE KEY UPDATE ... и затем SELECT ... Death_Rприменение ON DUPLICATE KEY UPDATE влечет за собой увеличение счетчика автоинкремента даже при обновлении записи И что? Death_RСамый простой вариант реализации (по записям) Но не самый правильный. Правильнее - всё грузишь во временную таблицу, а потом раскидываешь - одним запросом всё в одну таблицу, потом всё в другую и всё в третью. Суммарно получится 4 запроса, и неважно, сколько записей. Death_RПримеры приветствуются Тест-набор в студию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 07:52 |
|
||
|
Запись в БД (MySQL5.5+) с выбором Insert или Update и выборкой кодов с таблиц-справочников
|
|||
|---|---|---|---|
|
#18+
AkinaПравильнее - всё грузишь во временную таблицу, а потом раскидываешь - одним запросом всё в одну таблицу, потом всё в другую и всё в третью. Суммарно получится 4 запроса, и неважно, сколько записей.Не совсем понял о "все в одну временную таблицу" (Таблица kategor: ID (autoincrement), kname, describe, ID_kimport; Таблица ediz: ID(autoincrement), iname, ID_iimport; Таблица catalog: ID(autoincrement), ID_sk(штрихкод), ID_kategor, cname, kol, ID_ediz, price)?? И как потом раскинуть это все одним запросом в одну таблицу, ... ? AkinaТест-набор в студию.пока идет проектирование, поэтому тестовых данных нету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 17:34 |
|
||
|
Запись в БД (MySQL5.5+) с выбором Insert или Update и выборкой кодов с таблиц-справочников
|
|||
|---|---|---|---|
|
#18+
Да минимальную модель собери - DDL трёх таблиц, CSV на десяток записей и желаемый итог раскладки его по таблицам с пояснениями, почему так. На 10 минут делов-то, включая перекур... тебе же принцип нужен, а не отлизанный код? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 20:18 |
|
||
|
Запись в БД (MySQL5.5+) с выбором Insert или Update и выборкой кодов с таблиц-справочников
|
|||
|---|---|---|---|
|
#18+
Пардон, XML на десяток записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 20:19 |
|
||
|
Запись в БД (MySQL5.5+) с выбором Insert или Update и выборкой кодов с таблиц-справочников
|
|||
|---|---|---|---|
|
#18+
Код: xml 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. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. На выходе должны получить такое: Таблица единиц измерения id iname id_iimpor 1шт. dskut7fd2d 2ящикf93e1128c83a3кгzve5sr0ht6 синим выделен ИД-импорта, которого нету при добавлении "Топор", но в таблице он должен остаться Таблица категорий id kname descr id_kimport 1Фруктыfd512dfser32Алкогольные напиткиbgr07ed953Инструментыjdhr69etr3 Таблица товаров id id_kategor cname kol id_ediz price id_cimport 11Ананас10 5 195.7 dys51te3z89v22Пиво Жигулевское52240.515e9b8c48d31Груши321055.4765lc8we24s43Топор101159.99k8eg5r6t551Яблоки красные50355.2lekrw6kdr ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 23:42 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39380983&tid=1831017]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
| others: | 235ms |
| total: | 379ms |

| 0 / 0 |
