2017-01-18 16 views
1

私はCitiesを持つMySqlのテーブルを持っています。PHP&MySqlは文字列のWord/Phraseと一致します

|---------------------|------------------| 
|   ID   |  City   | 
|---------------------|------------------| 
|   1   |  Berlin  | 
|---------------------|------------------| 
|   2   |  Los Angeles | 
|---------------------|------------------| 
|   3   |  Shanghai  | 
|---------------------|------------------| 

と私はこのようなPHPの文字列があります: "Iベルリン、ロサンゼルスなどの" $文字列=を

私は、文字列に都市/都市が含まれている場合は、MySqlデータベースを見たいと思います。 しかし、私は最高の解決策が何であるか知りません。 Jsonファイルとして都市リストを持つ方が良いかも知れませんか?

+0

はその間によるものであってもよい、あなたの文字列の文を爆発、データベースから配列を取る '」「'、ループ内でそれらを置く&あなたは共通で任意の単語を見つけるかどうかを確認します。 – Vikrant

答えて

3

あなたはそれを確認するためにmysqlクエリを使用します。

Select * from table_name where match(City) against ('I like Berlin and Los Angeles') 

か、あなたはそれでソートメカニズムを必要とするように私は、クエリを変更しています

Select * from table_name where city like '%I like Berlin and Los Angeles%' 

のように使用することができます。

Select *,(match(City) against ('I like Los Angeles and Berlin')) as relevance from city 
where match(City) against ('I like Los Angeles and Berlin') ORDER BY relevance ASC; 

これは、あなたがテーブルにある都市を並べ替えることができます。

+1

マッチ関数を使用する列はFULLTEXTインデックスでなければなりません –

+0

@Nishtantあなたの2番目の答えは面白いです!私は完全なStringを同様の関数としてチェックするアイデアは決してありませんでした!シティフィールドはFULLTEXTインデックスでなければなりませんか? – Dennis

+0

"反対"の方法はうまくいきますが、ちょっとした問題です。どのように私は順序で結果を得ることができます、どのように文字列にある?私の例では でなければなりません。1. berlin und 2. los angeles。 – Dennis

0

すべての都市をデータベースから配列に変換して配列に格納してください。

$cities = ['Berlin', 'Los Angeles', 'Shanghai']; 
$string = 'I like Berlin and Los Angeles.'; 
$result = []; 
$pattern = '/('.implode('|', $cities).')/'; 
preg_match_all($pattern, $string, $result); 

SAMPLE:http://phpio.net/s/2t70

+0

これはうまく動作します!多次元配列でこれをどうやって行うことができますか? – Dennis

関連する問題