2010-12-06 9 views
0

Ich versuche, eine Abfrage zu erstellen, die vier verschiedene Tabellen mit einem Schlüsselwort sucht, um alle Elemente, die Liste unter diesem Speicherort sind, zu bringen.PHP MYSQL Suche dasselbe Schlüsselwort mit mehreren Tabellen

Ich habe vier Tabellen - Land - Staatliche - Landkreis - Stadt

für z.B. UK -> England -> West Midlands -> Birmingham

Wenn Benutzer in West Midlands ich werde nicht alle Elemente einschließlich der Elemente unter birmingham, um zu sehen, Walsall, wolverhampton

Das, was ich kam mit

$location = $_POST['location']; 
$city_sql = " SELECT * FROM city"; 

$city_result = $db->query($city_sql); 
$new_array=array(); 
$i=0; 
while ($fetch_sql = $db->fetch_object($city_result)){ 

    if (strcmp(soundex(strtolower($fetch_sql->name)), soundex(strtolower($location))) == 0) { 
     $new_array[$i]['name'] = $fetch_sql->name; 
     $new_array[$i]['code'] = $fetch_sql->name; 
     $i++; 
    } 
} 

$k=0; 
for ($j=0; $j < sizeof($new_array); $j++){ 
    $i = similar_text(strtolower($new_array[$j]['name']), strtolower($db->escape_value($location)), &$similarity_pst); 
    if($i > $k && $i > 7){ 
     $k = $i; 
      $city_db_name = $new_array[$j]['name']; 
      $city_code = $new_array[$j]['code']; 
    } 
} 

Bitte lassen Sie mich wissen, wenn Sie eine Idee haben.

PHP MYSQL Suche gleiches Stichwort mit mehreren Tabellen

Antwort

1

Sie sollten SQL-Funktionen verwenden, um Ihre Daten zu erhalten, nicht PHP.

Wenn ich richtig verstanden habe, möchten Sie Daten aus mehreren Tabellen und mehreren Spalten erhalten. Ändern Ihre Abfrage wie folgt aus:

SELECT 
    -- list of considered columns 
    col1, 
    col2, 
    col3 
    -- ... 
FROM 
    City 
JOIN 
    State ON State.state_id = City.state_id 
JOIN 
    Country ON Country.country_id = State.country_id 
WHERE 
    col1 LIKE '%keyword%' 
    OR col2 LIKE '%keyword%' 
    OR col3 LIKE '%keyword%' 
    -- ... 

wie das, Sie Spalten, die Sie brauchen Ihr Keyword enthält. Zum Beispiel, wenn der Tisch Stadt { 'Paris', 'Paramatta', 'Porto'} enthält, unter dem Stichwort Par, und die Abfrage SELECT name FROM city WHERE name LIKE '%Par%' kehren Sie { 'Paris', 'Paramatta'}

von So sollte die Verbindung zwischen Ländern, Städten usw. in Ihrer Datenbank rückwärts dargestellt werden: Land < - Bundesland < - Stadt

+0

Vielen Dank für Ihre schnelle Antwort. – SameasBefore

+0

Ich suche nicht alle drei Spalten zu suchen. Ich werde nicht überprüfen, um zu sehen, was es passt, und dann Liste von dieser Spalte zeigen – SameasBefore

+0

z. B. wenn es zu Zustand stopfen dann stoppen und zeigen Sie alles für das, aber wenn es der Stadt entspricht dann nur diese Stadt. – SameasBefore