0

MySQL

表:都市

+----+----------+
| id |   city   |
+----+----------+
| 1  | New York |
+----+----------+

表:ステーション

+----+--------------+---------+
| id |     name     | city_id |
+----+--------------+---------+
| 1  |   Woodlawn   |    1    |
+----+--------------+---------+
| 2  | Mosholu Pkwy |    1    |
+----+--------------+---------+

PHP

$string = mysql_real_escape_string('woodlawn new york');

$a = mysql_query("

    SELECT s.id FROM cities AS c, stations AS s 

    WHERE CONCAT_WS(' ', s.name, c.city) LIKE '%$string%' AND c.id = s.city_id

");

while($b = mysql_fetch_assoc($a))
{
   echo $b['id'];
}

問題

ただし、上記の例は、次の検索を実行すると正常に機能します。

 $string = mysql_real_escape_string('mosholu new york');

mosholu pkwy new yorkを明示的に検索しない限り、結果は0になります。

可能なオプション?

もちろん、FULLTEXT検索をと組み合わせて使用​​することはできませんCONCAT_WScitiesまた、テーブルの構造をそのままにして、テーブルを1つ、テーブルを1つ用意したいと思いますstations

では、駅名と都市名を含む4番目の列をstationsテーブルに追加して、それを検索する唯一のオプションはありますか?FULLTEXT

stationsしかし、たとえば都市名を更新してから、テーブル内のすべての行についても変更する必要がある場合は、お尻が痛くなるだけです。

4

1 に答える 1

1

空白$string%ワイルドカードに置き換えるだけです。これは、PHPまたはMySQLのいずれかで好きなように行うことができます。たとえば、MySQLでは:

SELECT s.id
FROM   cities AS c JOIN stations AS s ON c.id = s.city_id
WHERE  CONCAT_WS(' ', s.name, c.city) LIKE REPLACE('%$string%', ' ', '%')
于 2012-05-29T13:54:39.197 に答える