2016-05-23 14 views
0

Ich habe eine Abfrage funktioniert gut für eine Twitter-Typahead-Suche. Sie enthält mehrere Felder, so dass der Suchbegriff customer_name, address, bis zu 4 Telefonnummern enthält, nach denen gesucht werden soll. Ich habe zur Zeit den Adressbereich der Kundentabelle in [Adresse] für die Hausnummer und [Straße] für den Straßennamen unterteilt. Ich möchte jedoch die Verwendung einer Straßentabelle implementieren und die Straßenspalte durch [steeet_id] ersetzen. Ich bin völlig verloren, um die Abfrage neu zu strukturieren, um die [street_id] zu verwenden und den Namen der Straße noch anzuzeigen. Im Folgenden finden Sie die Seite, auf der die Abfrage ausgeführt wird und das JSON-Array zurückgibt. Jede Hilfe wird sehr geschätzt.brauche Hilfe bei der Umstrukturierung einer Abfrage

<?php 
if(isset($_POST['query'])) { 
    //connect to database 
    include 'connect.php'; 
    //retrieve the query 
    $query = $_POST['query']; 
    //search database for all similar items 
    $sql = mysql_query("SELECT * FROM (
    SELECT customer_id, customer_name, address, street, phone_1, phone_2, phone_3, phone_4, CONCAT(customer_name, ' ', address, ' ', street, ' ', phone_1, ' ', phone_2, ' ', phone_3, ' ', phone_4) as `mysearch` 
    FROM customers) base 
    WHERE `mysearch` LIKE '%{$query}%' 
    ORDER BY customer_name ASC, street ASC, address ASC 
    "); 
    $array = array(); 
    while ($row = mysql_fetch_assoc($sql)) { 
     $array[] = $row['customer_name'] . " " . $row['address'] . " " . $row['street'] . " " . $row['phone_1']. " " . $row['phone_2']. " " . $row['phone_4']. " " . $row['phone_3']." id#" . $row['customer_id']; 
    } 
    //return JSON array 
    echo json_encode($array); 
} 
?> 
+0

Wir machen PHPs mysql_ API nicht mehr. – Strawberry

+0

Es sieht so aus, als ob Sie eine MySQL-Suche in natürlicher Sprache verwenden sollten. http://dev.mysql.com/doc/refman/5.7/en/fulltext-natural-language.html –

+1

BTW, sollten Sie lernen, CONCAT_WS() ', so müssen Sie nicht wiederholt die Leerzeichen zwischen alle Spalten, die Sie verketten. – Barmar

Antwort

1

kommen einfach, dass streets Tabelle in Ihre innere Abfrage (Ich verließ das äußere Teil aus, da es sich nicht ändert):

SELECT customer_id, customer_name, address, street, phone_1, phone_2, phone_3, 
     phone_4, CONCAT(customer_name, ' ', address, ' ', street, ' ', phone_1, 
         ' ', phone_2, ' ', phone_3, ' ', phone_4) as `mysearch` 
    FROM customers 
    INNER JOIN streets ON streets.street_id = customers.street_id 

der Teil INNER JOIN ... ist, was Sie hinzufügen müssen also.

Ich habe angenommen, die streets Tabelle hat eine street_id Feld. Verwenden Sie den Namen, den es tatsächlich hat (möglicherweise nur id).

+0

Danke, produziertes Ergebnis, das ich brauchte. –

Verwandte Themen