Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Задачка по комбинаторике
|
|||
|---|---|---|---|
|
#18+
Всем доброго времени суток. Дано: Интернет-магазин. Товары имеют опции: цвет/размер/фасон/... У разных товаров разное количество опций и их возможных значений. Опции хранятся в таблице product_option: product_id int option_id int Описание опции в отдельной таблице и оно нам не интересно. Возможные значения опций в таблице product_option_value: product_id int option_id int value_id int Описание значений опций тоже в отдельной таблице, не рассматриваемой нами. Требуется: Заполнить заполнить структуру для хранения возможных комбинаций опций. relatedoptions: relatedoption_id int auto_increment primary key product_id int Набор связанных значений relatedoptions_options: product_id relatedoption_id option_id value_id Help, please! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2017, 23:27 |
|
||
|
Задачка по комбинаторике
|
|||
|---|---|---|---|
|
#18+
Ну обычный cross join... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2017, 23:57 |
|
||
|
Задачка по комбинаторике
|
|||
|---|---|---|---|
|
#18+
jsmirnoww, Модератор: Временный бан за спам в подписи. Договаривайтесь с модераторами других разделов о зачистке от вашего спама. Иначе бан превратится в постоянный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2017, 00:23 |
|
||
|
Задачка по комбинаторике
|
|||
|---|---|---|---|
|
#18+
jsmirnoww, Модератор: Бан снял под обязательство больше не спамить. Но моей просьбы убрать рекламные ссылки из предыдущих топиков это не отменяет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2017, 14:21 |
|
||
|
Задачка по комбинаторике
|
|||
|---|---|---|---|
|
#18+
Может я что то не понимаю, но по моему cross join'ом можно получить комбинации значений заранее известного и одинакового количества опций. У меня же количество заранее неизвестно и может быть разным в разных товарах. Если не трудно, набросайте запрос, если я ошибаюсь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2017, 16:10 |
|
||
|
Задачка по комбинаторике
|
|||
|---|---|---|---|
|
#18+
CROSS JOIN объединяет каждую запись левой таблицы с каждой записью правой. А отбор по одинаковости начинается уже в секциях отбора (ON, WHERE), буде они есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2017, 16:27 |
|
||
|
Задачка по комбинаторике
|
|||
|---|---|---|---|
|
#18+
чтобы не быть голословным, я подготовил и заполнил тестовые таблички Код: 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. 56. 57. 58. на выходе надо получить sql_ru_relatedoptions_options для товара №1 Код: sql 1. 2. 3. 4. 5. для товара №2 мы должны получить связки каждого цвета с каждым доступным для него размером Код: 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. если не трудно, набросайте запрос, который получит такие комбинации значений опций для одного товара, с неизвестным заранее количеством опций ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2017, 23:53 |
|
||
|
Задачка по комбинаторике
|
|||
|---|---|---|---|
|
#18+
Откуда взялось в выходном наборе поле relatedoption_id? в исходных данных ни такого поля, ни таких значений - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 07:49 |
|
||
|
Задачка по комбинаторике
|
|||
|---|---|---|---|
|
#18+
AkinaОткуда взялось в выходном наборе поле relatedoption_id? в исходных данных ни такого поля, ни таких значений - нет. это идентификатор связки опций. он был в первом сообщении изначально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 12:07 |
|
||
|
Задачка по комбинаторике
|
|||
|---|---|---|---|
|
#18+
Брр... тогда я неверно понял задачу, получается. Тогда у тебя всё равно обычный cross join, но вот количество копий таблицы, которые нужно использовать, будет меняться в зависимости от количества опций для товара - то есть придётся реализовывать всё это в рамках ХП и динамического SQL. Как вариант, построить несколько запросов, каждый для своего количества опций (вряд ли их будет очень много), и выбирать нужный в зависимости от COUNT(sql_ru_product_option.option_id) для текущего sql_ru_product_option.product_id. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 12:24 |
|
||
|
Задачка по комбинаторике
|
|||
|---|---|---|---|
|
#18+
ну да, cross join c рекурсивным вызовом хранимой процедуры из цикла по курсору. в результате настолько сложная логика обработки события окончания набора данных курсора, что уходит очень много сил и времени на отладку. я бросил эту затею. фигачу запросы вручную для каждого возможного количества опций в товаре. если всё успешно, то за сегодня-завтра сделаю. Думаю это быстрее и с результат гарантирован. Но! как-то не по феншую :(, поэтому и обратился к SQL-эгрегору ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 12:49 |
|
||
|
|

start [/forum/search_topic.php?author=yulya97&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
11ms |
get forum list: |
11ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 439ms |
| total: | 589ms |

| 0 / 0 |
