2010-08-03 63 views
0

我对构建查询感到困惑。我正在一家餐馆网站实施搜索功能。用户首先选择他正在搜索餐馆的区域,然后从复选框中选择中国,日本,泰国等食物类型。如何构建查询

选择所有这些后,将显示在选定区域提供所选食物的餐馆。我成功地获得了yser的pincode和食物类型。

我甲肝两条表具有以下字段,

与领域

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

restaurant_iw表的字段

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

我的困惑是如何从获取记录两个表条件:

  • P码= Userselectedpincode
  • 菜单=使用者所选择的菜单

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:打我,但我不得不在JOIN – 2010-08-03 18:40:30

+0

@OMG小马的iw.menu - 我想清楚地分开的关系从加盟条款过滤条款,因为我认为它提高了可读性。它可以很容易地扫描所有的“ON”子句以获得正确的关系,而不会在其中添加额外的非关系过滤子句。 – RedFilter 2010-08-03 18:50:27

+0

在JOIN和WHERE中的位置可以产生不同的结果 – 2010-08-03 19:10:47

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 2010-08-03 18:51:50

+0

是的,你完全正确! – Rajasekar 2010-08-03 19:05:59