2010-11-09 4 views
0

J'ai deux tables: Une table de restaurants et une table de zones. La clé "EntryID" dans le tableau Addresses est un nombre identique à la clé primaire de chaque enregistrement dans la table de restaurant. Donc EntryID est une clé étrangère. Je veux être en mesure de modifier mon script de sélection PHP pour rechercher la base de données à travers ces deux tables. Voici ce que j'ai en ce moment:Interroger plusieurs tables - retourner 1 match

$RPrice = $_GET["price"]; 
    $RType = $_GET["type"]; 
    $RAtmosphere = $_GET["RAtmosphere"]; 
    $RArea = $_GET["RArea"]; 
if (!empty($RPrice)) $w[]="Foodlist.price='".mysql_real_escape_string($RPrice)."'"; 
if (!empty($RType)) $w[]="Foodlist.ftype='".mysql_real_escape_string($RType)."'"; 
if (!empty($RAtmosphere)) $w[]="Foodlist.atmosphere='".mysql_real_escape_string($RAtmosphere)."'"; 
if (!empty($RArea)) $w[]="Addresses.area='".mysql_real_escape_string($RArea)."'"; 


if (count($w)) $where="WHERE ".implode(' AND ',$w); else $where=''; 
$sql="SELECT Foodlist.ID, Foodlist.name from Foodlist JOIN Addresses ON (Foodlist.ID = Addresses.EntryID) $where"; 


$result= mysql_query($sql); 
    while($row=mysql_fetch_array($result)){ 
     $ID=$row['ID']; 
    echo "<a class=\"cross-link\" href=\"javascript:ajaxpage('result.php?id=$ID', 'results2'); ajaxpage('videoloader.php?id=$ID', 'results1');\">".$row['name']."</a><div id=\"contentarea\"></div>"; 

    } 

Je l'ai fait remarquer la partie « zone » parce que c'est quelque chose qui devra être changé. Je veux être en mesure de maintenir la même fonctionnalité que précédemment, mais je veux être en mesure de rechercher dans plusieurs enregistrements de zone. J'espère que cela a du sens. Si vous avez besoin de plus de précisions, s'il vous plaît faites le moi savoir.

Foodlist (tableau) contient les colonnes suivantes: ID, prix, type, atmosphère Adresses (table) contient les colonnes suivantes: EntryID, zone

En ce moment, la requête est en supposant que toutes ces colonnes (sauf entryID) sont dans foodList. J'ai besoin de la requête pour rechercher la zone dans le tableau Adresses. En outre, je veux renvoyer 1 résultat de la requête par ID. Il est possible qu'un enregistrement dans la table FoodList ait plusieurs enregistrements correspondants dans la table Addresses. Dans ce cas, je veux seulement qu'il renvoie celui qui correspond à la zone donnée.

Répondre

0
SELECT f.ID, name FROM Foodlist f JOIN Addresses a ON (f.ID = a.EntryID) $where 

Je crois que cela devrait être suffisant pour ce dont vous avez besoin.

+0

cela ne fonctionne pas. par exemple, disons qu'il y a un identifiant dans Foodlist '12'. Dans les tables d'adresses, il peut y avoir deux enregistrements associés à '12', un avec zone = nord et un autre avec zone = sud. Je devrais seulement en retourner un. cette requête renvoie également uniquement les valeurs qui ont un enregistrement dans la table d'adresses. ce peut être le cas, non. – scifirocket

+0

Ensuite, dans ce cas, ajoutez LIMIT 1 et transformez JOIN en LEFT JOIN et les problèmes seront résolus. –

Questions connexes