2010-08-03 43 views
0

我有5個複選框,像雞肉,水果,蔬菜,小吃等食物。如何結合sql查詢的結果集?

什麼,我想實現當用戶選中該複選框項目,點擊提交,它將搜索餐館提供的選擇項,

表將有2場:restid,菜單和數據像這樣存儲在表

restid->1, menu->chicken 
restid->1, menu->Burger 
restid->2, menu->fruits 
restid->3, menu->chicken 

我的疑問是如何搜索表中的餐館。我的計劃是,通過選擇語句(select * from restaurant_table where menu ='menu')循環遍歷每個項目;

當我們循環遍歷循環時,我們如何組合每個菜單的結果?

plz幫助任何幫助將不勝感激

+0

我無法理解這個問題。 「結合每個菜單的結果」是什麼意思?如果你做了一個'SELECT restid FROM restaurant_table WHERE menu ='foo'',你會得到每個餐廳的foo代碼。如果您想要搜索多個事物,請執行SQL INTERSECT或AND。 – Borealid 2010-08-03 06:53:19

+1

由於Shrapnel上校指出的明顯缺陷,我的回答被撤回。 – 2010-08-03 07:54:20

回答

2

我希望你有兩個桌子的餐廳和菜單

餐廳 - restid,名

菜單 - 菜單ID, restid,菜單

php代碼可以是這樣的

<?php 
    //$_POST['menus'] is the array of checkboxes 
    foreach($_POST['menus'] as $menu) 
    { 
     if($menu) $selected[]=intval($menu); 
    } 
    $selectedlist=implode(",",$selected); 

    //The SQL Query 
    $query="SELECT name from restaurant WHERE menu in(".$selectedlist.")"; 
    $record=mysql_fetch_array(mysql_query($query)); //Loop this to get more records 
?> 

希望這是有用的

+0

編輯你的代碼 – 2010-08-03 07:40:05

+0

@Col。 Shrapnel謝謝你,我會記住。 :) – srinivas 2010-08-03 07:45:44

+0

它是否返回餐館whith選擇的菜單(AND)或單個菜單目前(或) – Rajasekar 2010-08-03 07:53:30

1

下面的查詢將返回的restids對於那些既有雞漢堡菜單上的餐館 - 假設restaurant_table沒有重複的行。

SELECT restid, COUNT(*) as cnt 
FROM restaurant_table 
WHERE menu IN ('chicken', 'burger') 
GROUP BY restid 
HAVING COUNT(*) = 2 
+0

可以使用'count(distinct menu)'而不是'count(*)'來處理重複的行。 – 2010-08-03 11:23:49

0

也許這可以幫助你爲出發點:

$where = " 1=1 "; 

if ($_POST["chicken"]) 
$where = $where . " AND menu = 'chicken' "; 

if ($_POST["Burger"]) 
$where = $where . " AND menu = 'Burger' "; 

if ($_POST["fruits"]) 
$where = $where . " AND menu = 'fruits' "; 

$sql = "SELECT * FROM restaurants WHERE " + $where; 
+0

你的查詢會找到任何一行嗎? – 2010-08-03 07:45:12