|
|
|
Сложный запрос - определение вхождения подможества
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Столкнулся с такой задачей и никак не пойму как ее решить. Запрос на самом деле очень большой, но теперь нужно его нагрузить еще и таким функционалом поэтому попытаюсь объяснить как можно проще. Есть две таблицы. Первая таблица готовых блюд: id, название блюда, каллорийность и тд. Вторая таблица это ингридиенты блюд, соответственно id, название ингридиента, id_блюда. Соответственно связь между ними такая: Код: sql 1. Таким образом получаем что-то типа: автор1 | Салат Цезарь| Курица, Сухарики, Салат и тд 2 | Борщ | Свекла, Чеснок, Морковь и тд Задача состоит в том чтобы пользователь ввел ингридиенты которые у него есть, а в ответ получил возможные блюда. Важно чтобы состав продуктов блюда полностью являлся подмножеством продуктов пользователя. Для простоты ингридиенты назовем латинскими маленькими буквами. У пользователя есть продукты a, b, c, d Блюда: авторe b ac acd ace abcd abcde Нам нужно показать выбрать: авторb ac acd abcd Если идти в лоб, то нужно составить всевозможные комбинации продуктов пользователя выбирать через IN (). Можно ли как-то решить эту задачу более эффективно? Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2014, 03:46:36 |
|
||
|
Сложный запрос - определение вхождения подможества
|
|||
|---|---|---|---|
|
#18+
fourty, Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2014, 05:04:57 |
|
||
|
Сложный запрос - определение вхождения подможества
|
|||
|---|---|---|---|
|
#18+
Спаибо, но такой вариант не подходит. Вот пример: авторБлюдо1. Состав a,b,c Блюдо2. Состав: a, f Запрос: Код: sql 1. 2. 3. 4. 5. Выборка получается из обоих блюд. Хотя для блюда1 не достаточно ингридиента c ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2014, 17:42:22 |
|
||
|
Сложный запрос - определение вхождения подможества
|
|||
|---|---|---|---|
|
#18+
чтото нелогично в самом начале.. тоблиц должно быть три Блюда(ид_блюда,название) Ингридиенты(ид_ингредиента,название) Рецепты(состав) (ид_иблюда,ид_ингридиента) или молоко для молочной каши гречневой, не тоже самое что молоко для манной каши??? и тогда получим алгоритм решения 1)найти ингридиенты которых нет 2)найти блюда которые нельзя приготовить 3)найти блюда которые не есть в списке 2 Код: sql 1. 2. 3. 4. 5. 6. 7. решение ниже ..я не вникал, но похоже не верное, ибо в хевинг части условие предполагаемое, что рецепт блюда должен включать все имеющиеся ингридиенты, а в условия сказано подмножеством. тоесть блюдо стакан молока для ингридиентов молоко часнок чай сахар водка пиво тоже подходит, а решение его откинет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2014, 19:05:01 |
|
||
|
Сложный запрос - определение вхождения подможества
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, Спасибо огромное!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2014, 20:03:33 |
|
||
|
Сложный запрос - определение вхождения подможества
|
|||
|---|---|---|---|
|
#18+
fourtyХотя для блюда1 не достаточно ингридиента c Да, я не обратил внимание не требование полного подмножества. Тогда вот вариант без IN/NOT IN, авось побыстрее будет Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2014, 06:28:43 |
|
||
|
Сложный запрос - определение вхождения подможества
|
|||
|---|---|---|---|
|
#18+
tanglirfourtyХотя для блюда1 не достаточно ингридиента c Да, я не обратил внимание не требование полного подмножества. Тогда вот вариант без IN/NOT IN, авось побыстрее будет Код: sql 1. 2. 3. 4. ты верно мыслишь, просто я в даной ситуации читер :) я учил скл по той же книге что и автор, и знаю что там речь идёт о базе данных санатория(столовой) и предполагаеться что на складе из скажем 1000 ингридиентов есть всё, закончилась редиска, может ещо прогнили кокосы... всё отальное есть. :) а для написаной формулировки, аля база рецептур на кулинарном сайте, а петя хочет узнать что из тех остатков в его холодильнике можно забадяжить, возможно твой будет быстрее. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2014, 14:18:42 |
|
||
|
Сложный запрос - определение вхождения подможества
|
|||
|---|---|---|---|
|
#18+
а можно в MS SQL? суть не изменится, а перебивать в SQLFIDDLE лениво Код: 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. id246 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2014, 15:43:52 |
|
||
|
Сложный запрос - определение вхождения подможества
|
|||
|---|---|---|---|
|
#18+
tanglir , Спасибо. Этот вариант почти в 10 раз быстрее отрабатывает, чем у alex564657498765453. Нет, книга не та. Задача из реальной системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2014, 03:54:36 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38633602&tid=1834878]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
48ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 349ms |

| 0 / 0 |
