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 :: Сложная выборка "от обратного"

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
grefon
Отправлено: 15 Июля, 2011 - 15:04:52
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


Помог: 32 раз(а)




Ситуация такая: есть 2 таблицы (1-продукты, 2-блюда) и 1 таблица связывающие эти две таблицы (блюда/продукты). У нас имеется список продуктов, и по этому списку необходимо выбрать подходящие блюда. Например:

Цитата:
таблица 1
______________
id | name
1 | Капуста
2 | Морковка
3 | Картошка


таблица 2
_________
id | name
1 | Рагу
2 | Драники
3 | Оливье


таблица 3
_________
id | id_блюда | id_продукта
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
4 | 2 | 2
5 | 2 | 3
6 | 3 | 3
7 | 3 | 9

Пользователь выбирает интересующие его продукты и мы получаем их id, например морковку и картошку (id 2 и 3). Имея эти id нужно выбрать из связывающей таблицы блюда, которые состоят только из картошки или только из морковки, или из первого и второго вместе. В результате получаем блюдо с id 2 (Драники). Если в этом блюде есть хотя бы еще один продукт, который мы не выбрали, значит оно уже не должно быть выбрано.
Получается выборка как бы идет от обратного и нам надо учитывать не "полный поиск" по заданному значению, а частичный поиск но с условием, чтобы у объекта который мы ищем не оставалось других значений.

Помогите, пожалуйста, составить запрос. А то я как то растерялся и ничего в голову не приходит.


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
DeepVarvar Супермодератор
Отправлено: 15 Июля, 2011 - 16:05:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




А ну вот похоже на то: http://forum.php.su/topic.php?fo...8&topic=2396
 
 Top
grefon
Отправлено: 16 Июля, 2011 - 12:10:51
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


Помог: 32 раз(а)




DeepVarvar пишет:
А ну вот похоже на то: http://forum.php.su/topic.php?fo...8&topic=2396

Не, это не то. Я вообще не соображу как через джойн можно решить мою задачку. Думал через груперовку по id блюд, но все равно нужно придумать как написать условие, чтобы выбирались только те блюда, у которых не будет лишних продуктов.


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
Мелкий Супермодератор
Отправлено: 16 Июля, 2011 - 13:46:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `id_блюда`, /* и др поля,*/ count(`id_блюда`) AS `cnt` FROM `блюда` LEFT JOIN `продукты` USING(`id_продукт`) WHERE `id_продукт` IN ('id_морковки','id_картошки') GROUP BY `id_блюда` HAVING `cnt`<=2

Так попробуй.

И в таблице связей поле id - лишнее. Составного ключа на id_продукта и id_блюда более чем достаточно.


-----
PostgreSQL DBA
 
 Top
grefon
Отправлено: 16 Июля, 2011 - 13:49:21
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


Помог: 32 раз(а)




Мелкий, ого! Пасиба! Попробую, потом отпишусь.


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB