|
|
|
Можно ли 1 запросом заменить 3 запроса?
|
|||
|---|---|---|---|
|
#18+
Доброй ночи! Есть такая табличка - хранит привязки опции к категориям - одна категория ко многим опциям. На скриншоте категория - розовая обводка, опции - зеленая обводка. Можно ли сделать запросом следующее? Входящие данные - ID категории = 26, для неё в БД должны остаться только опции с ID= 12, 14, 15 и добавиться опции ID=22, 45 Пока что есть вариант - сравнивать в PHP два массива - то, что есть и то, что должно быть, в зависимости от результатов сравнения какие-то опции удалять, какие-то добавлять...??? В худшем сценарии получается 3 запроса к БД...((( Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2018, 02:24 |
|
||
|
Можно ли 1 запросом заменить 3 запроса?
|
|||
|---|---|---|---|
|
#18+
вот картинка таблички ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2018, 02:25 |
|
||
|
Можно ли 1 запросом заменить 3 запроса?
|
|||
|---|---|---|---|
|
#18+
Олег КотейкинВ худшем сценарии получается 3 запроса к БД...Два. Код: sql 1. 2. 3. 4. 5. 6. 7. Но предварительно следует options_in_cat.id сделать автоинкрементным. Если это по каким-то невменяемым причинам невозможно, то второй запрос превращается в какую-нибудь дурь типа Код: sql 1. 2. 3. 4. 5. 6. 7. Возможные интерференции - за свой счёт. В 8-й версии можно слегка упроститься, переместив всю предрасчётную хрень в секцию WITH. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2018, 07:41 |
|
||
|
Можно ли 1 запросом заменить 3 запроса?
|
|||
|---|---|---|---|
|
#18+
AkinaНо предварительно следует options_in_cat.id сделать автоинкрементным. спасибо за ответ! да. сорри, забыл указать, options_in_cat.id автоинкрементный! Т.е. в моем случае не все так печально?)) И еще небольшой нюанс - я спросил неоднозначно, вот здесь: авторВходящие данные - ID категории = 26, для неё в БД должны остаться только опции с ID= 12, 14, 15 и добавиться опции ID=22, 45 на самом деле это только я знаю что оставить а что добавить, на самом деле-то приходит массив - вот это должно быть в БД - 12,14,15,22,45 - и точка. А чтобы массив приходил двумя кусками, то для этого потребуется php-обработка, чего хотелось бы избежать. Или сделать php-обработку, но тогда обойтись одним sql-запросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2018, 10:39 |
|
||
|
Можно ли 1 запросом заменить 3 запроса?
|
|||
|---|---|---|---|
|
#18+
Akina, вот еще пришел в голову вариант - а что если писать в таблицу ОДНИМ запросом - банальную вставку без всяких предварительных проверок, т.е. прямо так и пишем - для категории id=26 вставляем строки 12,14,15,22,45, т.е. в таблице будет накапливаться некая избыточность, а отсеивать уже при выводе из БД? так как функция этой таблички - упростить отображение и выбор в АДМИНКЕ, т.е. юзер всегда один... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2018, 10:43 |
|
||
|
Можно ли 1 запросом заменить 3 запроса?
|
|||
|---|---|---|---|
|
#18+
Олег Котейкинна самом деле-то приходит массив - вот это должно быть в БД - 12,14,15,22,45 - и точка.Ну так в чём проблема? Первый запрос: Код: sql 1. 2. 3. 4. Он удаляет все записи, которых быть не должно. Второй запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Он вставляет недостающие записи. При наличии уникального индекса по (option_id, cat_id) второй запрос упрощается до Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2018, 11:16 |
|
||
|
Можно ли 1 запросом заменить 3 запроса?
|
|||
|---|---|---|---|
|
#18+
Akina, да. спасибо. Но запросов таки не два0) Вложенные же я считаю как отдельные.Хотя для админки скорость не так важна... Тут еще в чем нюанс - чтобы сформировать вот этот подзапрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. придется все-таки городить конструкцию на php, ведь перечень айдишек приходит массивом... Тогда уж наверное в цикле и делать запросы: 1. mysql запрос текущей комбинации айдишек 2. array_diff (входящий массив, массив из п.1)- получим айдишки к удалению 3. array_diff (массив из п.1, входящий массив) - получим айдишки к вставке 4. mysql запрос delete in (п.2) 5. mysql запрос insert в цикле по массиву изп.3 )))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2018, 02:12 |
|
||
|
Можно ли 1 запросом заменить 3 запроса?
|
|||
|---|---|---|---|
|
#18+
Олег Котейкин, как вариант - выгрузить массив в файл в формате option_id, 26, - удалить всю 26 категорию, - загрузить из файла по LOAD DATA INFILE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2018, 06:47 |
|
||
|
Можно ли 1 запросом заменить 3 запроса?
|
|||
|---|---|---|---|
|
#18+
Олег КотейкинВложенные же я считаю как отдельные. А тогда чего бы каждую кляузу за отдельный запрос не считать? так ещё больше получится... Олег Котейкинчтобы сформировать вот этот подзапрос [skipped] придется все-таки городить конструкцию на php, ведь перечень айдишек приходит массивом...Кто мешает разобрать массив на элементы? особенно если где-то на сервере есть таблица чисел (кстати, полезная штука). Олег КотейкинТогда уж наверное в цикле и делать запросы:Нет, если Вы PHP знаете намного лучше, чем MySQL - делайте так... работать-то оно будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2018, 07:25 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=46&tid=1829563]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 135ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...