2010-08-03 96 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