2010-08-03 5 views
0

Я смущен созданием запроса. Я реализую функцию поиска в ресторане. Сначала пользователь выбирает область, в которой он ищет ресторан, а затем он выбирает типы продуктов, такие как китайский, японский, тайский из флажков.Как построить запрос

После того, как выберете все это, будут показаны рестораны, которые предоставляют выбранную пищу в выбранной области. Мне удалось получить пинкоды и типы продуктов питания от yser.

Я ВГА две таблицы со следующими полями,

restaurant_dp таблицу с полями

id -ID of the restaurant 
pcode -pincode of the area 

restaurant_iw таблицы с полями

id - id of the restaurant 
menu - menu the restaurant provides (eg., Chinese, thai etc.,) 

Моя путаница в том, как извлечь записи от обоих таблицы с условиями:

  • PCODE = Userselectedpincode
  • меню = userselected меню

Plz помощь. Любая помощь будет оценена

ответ

1
SELECT DISTINCT dp.id FROM restaurant_dp dp INNER JOIN restaurant_iw iw ON dp.id = iw.id WHERE dp.pcode = $pcode AND iw.menu = $menu 
4
select dp.id 
from restaurant_dp dp 
inner join restaurant_iw iw on dp.id = iw.id 
where dp.pcode = Userselectedpincode 
    and iw.menu = userselectedmenu 
+0

+1: Избили меня, хотя я имею iw.menu в РЕГИСТРИРУЙТЕСЬ –

+0

@OMG Ponies - Я хотел бы четко отделить реляционная присоединиться пункты из как я думаю, это улучшает читаемость. Это позволяет легко отсканировать все «ON» предложения для правильных отношений без дополнительного шума при размещении дополнительных нереляционных пунктов фильтрации. – RedFilter

+0

Размещение в JOIN против WHERE может дать разные результаты –

0
select * from restaurant_dp dp join restaurant_iw iw on dp.pcode = iw.pcode where dp.pcode = $userselectedpincode and iw.menu = $userselectedmenu; 

тогда вы просто должны убедиться, что эти две переменные, используемые в запросе заполняются правильно.

1
SELECT * 
FROM restaurant_dp AS dp 
LEFT JOIN restaurant_iw AS iw 
ON dp.IDrestaurant= iw.IDrestaurant 
WHERE dp.pcode = Userselectedpincode 
AND iw.menu = userselectedmenu 
0

Вы действительно должны объединить их к одной таблице, со всеми полями, относящихся к определенному ресторан в одном ряду. Если вы это сделаете, запрос просто станет SELECT * FROM restaurants WHERE pcode = 'code' AND menu = 'menu';. Ваша текущая настройка делает вещи более трудным, требующим объединения:

SELECT * FROM restaurant_iw AS iw 
LEFT JOIN restaurant_dp AS dp ON iw.id = dp.id 
WHERE dp.pcode = 'code' AND iw.menu = 'menu'; 
+1

Я думаю, что идея состоит в том, что в ресторане может быть несколько меню, что требует двух таблиц для сохранения нормализации. – RedFilter

+0

Да, вы абсолютно правы! – Rajasekar

Смежные вопросы