2010-12-06 34 views
0

Je suis essayer de créer une requête qui va chercher quatre tables différentes avec un mot-clé pour amener tous les éléments qui sont sous cette liste.PHP MYSQL recherche même mot-clé avec plusieurs tables

J'ai quatre tables - Pays - État - Comté - Ville

pour exemple Royaume-Uni -> Angleterre -> Midlands de l'Ouest -> Birmingham

Lorsque les types d'utilisateurs à West Midlands je ne vais pas voir tous les articles, y compris les éléments sous birmingham, Walsall, wolverhampton

Ce que je suis venu avec

$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']; 
    } 
} 

S'il vous plaît laissez-moi savoir si vous avez une idée.

recherche PHP MYSQL même mot-clé avec plusieurs tables

Répondre

1

Vous devez utiliser les fonctionnalités SQL pour obtenir vos données, pas de PHP de.

Si j'ai bien compris, vous voulez obtenir des données de plusieurs tables et de plusieurs colonnes. Changer votre requête comme ça:

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%' 
    -- ... 

Comme ça, vous obtiendrez des colonnes dont vous avez besoin contenant votre mot-clé. Par exemple, si la Ville de table contient { 'Paris', 'Paramatta', 'Porto'}, en utilisant le mot-clé Par, et la requête SELECT name FROM city WHERE name LIKE '%Par%' vous ramènera { 'Paris', 'Paramatta'}

Par le chemin, le lien entre les pays, les villes, etc. doit être représenté à l'envers dans votre base de données: Pays < - Etat < - Ville

+0

Nous vous remercions de votre réponse rapide. – SameasBefore

+0

Je ne vais pas faire la recherche tous les trois cols. Je ne vais pas vérifier pour voir ce qu'il correspond et ensuite montrer la liste par ce col – SameasBefore

+0

par exemple si son cloested à l'état puis arrêtez et montrer tout pour cela, mais si elle correspond à la ville alors juste disply cette ville. – SameasBefore