Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Сложная выборка "от обратного"
Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010
Помог: 32 раз(а)
Ситуация такая: есть 2 таблицы (1-продукты, 2-блюда) и 1 таблица связывающие эти две таблицы (блюда/продукты). У нас имеется список продуктов, и по этому списку необходимо выбрать подходящие блюда. Например:
Цитата:
таблица 1
______________
id | name
1 | Капуста
2 | Морковка
3 | Картошка
таблица 2
_________
id | name
1 | Рагу
2 | Драники
3 | Оливье
Пользователь выбирает интересующие его продукты и мы получаем их id, например морковку и картошку (id 2 и 3). Имея эти id нужно выбрать из связывающей таблицы блюда, которые состоят только из картошки или только из морковки, или из первого и второго вместе. В результате получаем блюдо с id 2 (Драники). Если в этом блюде есть хотя бы еще один продукт, который мы не выбрали, значит оно уже не должно быть выбрано.
Получается выборка как бы идет от обратного и нам надо учитывать не "полный поиск" по заданному значению, а частичный поиск но с условием, чтобы у объекта который мы ищем не оставалось других значений.
Помогите, пожалуйста, составить запрос. А то я как то растерялся и ничего в голову не приходит.
----- ____________________________________________________________________
Ну как то так, наверное. http://grefon[dot]com
DeepVarvar
Отправлено: 15 Июля, 2011 - 16:05:16
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010
Помог: 32 раз(а)
DeepVarvar пишет:
А ну вот похоже на то: http://forum.php.su/topic.php?fo...8&topic=2396
Не, это не то. Я вообще не соображу как через джойн можно решить мою задачку. Думал через груперовку по id блюд, но все равно нужно придумать как написать условие, чтобы выбирались только те блюда, у которых не будет лишних продуктов.
----- ____________________________________________________________________
Ну как то так, наверное. http://grefon[dot]com
Мелкий
Отправлено: 16 Июля, 2011 - 13:46:19
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
SELECT`id_блюда`,/* и др поля,*/ count(`id_блюда`)AS`cnt`FROM`блюда`LEFTJOIN`продукты`USING(`id_продукт`)WHERE`id_продукт`IN('id_морковки','id_картошки')GROUPBY`id_блюда`HAVING`cnt`<=2
Так попробуй.
И в таблице связей поле id - лишнее. Составного ключа на id_продукта и id_блюда более чем достаточно.
----- PostgreSQL DBA
grefon
Отправлено: 16 Июля, 2011 - 13:49:21
Частый посетитель
Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010
Помог: 32 раз(а)
Мелкий, ого! Пасиба! Попробую, потом отпишусь.
----- ____________________________________________________________________
Ну как то так, наверное. http://grefon[dot]com
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.