PHP MYSQL искать одно и то же ключевое слово с несколькими таблицами - PullRequest
0 голосов
/ 07 декабря 2010

Я пытаюсь создать запрос, который будет искать в четырех разных таблицах по одному ключевому слову, чтобы привести все элементы, перечисленные в этом месте.

У меня есть четыре стола - Страна - Государственный - Округ - Город

например Великобритания -> Англия -> Уэст-Мидлендс -> Бирмингем

Когда пользователь печатает в Уэст-Мидлендсе, я вижу все предметы, включая предметы под Бирмингемом, Уолсоллом, Вулверхэмптоном

Это то, что я придумал

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

Пожалуйста, дайте мне знать, если у вас есть идеи.

PHP MYSQL искать одно и то же ключевое слово с несколькими таблицами

1 Ответ

1 голос
/ 07 декабря 2010

Вы должны использовать функции SQL для получения данных, а не PHP.

Если я правильно понял, вы хотите получить данные из нескольких таблиц и нескольких столбцов. Измените ваш запрос следующим образом:

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

Таким образом, вы получите нужные вам столбцы, содержащие ваше ключевое слово. Например, если таблица City содержит {'Paris', 'paramatta', 'Porto'}, используя ключевое слово Par , а запрос SELECT name FROM city WHERE name LIKE '%Par%' вернет вам {'Paris', 'paramatta' }

Кстати, связь между странами, городами и т. Д. Должна быть представлена ​​в вашей базе данных в обратном направлении: Страна <- Штат <- Город </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...