2016-10-27 5 views
1

Ich frage mich, wie/wenn ich die beiden Select-Anweisungen kombinieren kann.MySQL kombiniert mehrere Select-Anweisungen

 $searchCat = $mysqli->query("SELECT category_id, category.name FROM category WHERE category.name = '$searchTerm'"); 

    while ($r=$searchCat->fetch_assoc()) { 
     $category_id=$r["category_id"]; 

     $searchBus = $mysqli->query("SELECT business.name, business.street FROM business WHERE business.category_id = '$category_id'");    

     while ($r=$searchBus->fetch_assoc()) { 
      $name=$r["name"]; 
      $street=$r["street"]; 

      echo "$name, $street<br>"; 
     } 
    } // end of while 

Für die Ausgabe Ich brauche nur die Daten aus der Business-Tabelle, die erste Auswahl findet die Korrelation ID des gesuchten Begriffs, dass Id auch in der Business-Tabelle untergebracht ist.

Also kann ich eine Verbindung oder Vereinigung machen, wo die 1. Auswahl die ID bekommt und dann wird sie an die 2. Auswahl weitergegeben, so dass ich die 1. While überspringe?

+10

** WARNUNG **: Bei der Verwendung von 'mysqli' Sie [parametrisierte Abfragen] verwenden sollten (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) und ['bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php), um Benutzerdaten zu Ihrer Anfrage hinzuzufügen. ** Verwenden Sie NICHT ** String-Interpolation oder Verkettung, um dies zu erreichen, weil Sie einen schwerwiegenden [SQL injection bug] erstellt haben (http://bobby-tables.com/). ** NIEMALS ** $ _POST 'oder' $ _GET' Daten direkt in eine Abfrage einfügen, es kann sehr schädlich sein, wenn jemand versucht, Ihren Fehler auszunutzen. – tadman

Antwort

2

Sie es in einzelne Abfrage machen.

$query = "SELECT `business`.`name`, `business`.`street` 
      FROM `business`, `category` 
      WHERE 
      `business`.`category_id` = `category`.`category_id` 
       AND 
      `category`.`name` = '$searchTerm'"; 

$searchBus = $mysqli->query($query); 
+0

Danke! Das 'category.'name' = '$ searchTerm'-Bit hat mich geworfen – harkly

+0

Es funktioniert oder nicht? @harkly –

+0

Sorry, hat es getan. Ich habe damit herumgespielt. – harkly

1
SELECT category_id, category.name 
FROM category c inner join business b using (category_id) 
WHERE category.name = {Term} 

Bitte entkommen Ihre Anfragen obwohl seine derzeit offen für SQL-Injection-

+0

Danke! Ich werde dann entkommen, sobald ich alles herausgefunden und arbeiten habe – harkly

1

Sie den exists Operator verwenden:

SELECT business.name, business.street 
FROM business 
WHERE EXISTS (SELECT * 
       FROM category 
       WHERE category.name = '$searchTerm' AND 
         category.category_id = business.category_id) 
1
SELECT business.name, business.street, category.name 
FROM business 
JOIN category ON category.category_id = business.category_id 
WHERE category.name = '$searchTerm' 
0
SELECT business.name, business.street 
FROM category c, business b 
WHERE c.category_id = b.category_id and c.name = '$searchTerm' 
Verwandte Themen