2010-08-03 6 views
0

J'ai 5 case à cocher avec les produits alimentaires comme le poulet, les fruits, les légumes, les collations, .. comme ça.Comment combiner les ensembles de résultats d'une requête sql?

Ce que je suis en train de mettre en œuvre est lorsque l'utilisateur sélectionne les éléments de cases à cocher et les clics soumettre, il recherchera les restaurants fournissant les éléments sélectionnés,

Table aura 2 champs: restid, menu et les données stocké comme ceci dans le tableau

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

Mon doute est de savoir comment rechercher les restaurants dans la table. Mon plan est, boucle à travers la boucle for pour chaque élément avec l'instruction select comme (sélectionnez * from restaurant_table où menu = 'menu';)

lorsque nous bouclons la boucle comment pouvons-nous combiner les résultats pour chaque menu?

Plz aider toute aide sera appréciée

+0

Je vais avoir du mal à comprendre cette question. Que voulez-vous dire par "combiner les résultats pour chaque menu?" Si vous faites un 'SELECT restid FROM restaurant_table WHERE menu = 'foo'', vous obtiendrez l'ID de chaque restaurant servant foo. Si vous voulez rechercher plus d'une chose, faites un SQL 'INTERSECT' ou' AND'. – Borealid

+1

Ma réponse a été retirée, en raison du vice évident signalé par le colonel Shrapnel. –

Répondre

2

J'espère que vous avez deux restaurants de table et le menu

restaurant - restid, nom

Menu

- menuid, restid, menu

le code php peut être comme ceci

<?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 
?> 

Espérons que cela est utile

+0

a modifié un peu de votre code –

+0

@Col. Shrapnel merci pour ça je vais garder à l'esprit. :) – srinivas

+0

Est-ce qu'il retourne les restaurants à la fois les menus sélectionnés (ET) ou le menu unique présent (OR) – Rajasekar

1

La requête ci-dessous vous retourner les restids pour les restaurants qui ont à la fois un hamburger de poulet et dans le menu - en supposant que restaurant_table ne dispose pas de lignes en double.

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

Pourrait utiliser 'count (menu distinct)' au lieu de 'count (*)' pour traiter les lignes dupliquées. –

0

Peut-être que cela peut vous aider comme point de départ:

$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

Votre requête trouvera-t-elle une ligne? –

Questions connexes