2010-10-11 17 views
1

我有一個包含413,000個地名(Pris,London,...)的表有沒有一種方法(查詢)從指定文本中選擇位置。Mysql - 從指定文本中選擇單詞

例如:

「倫敦交通局(TfL)交通運輸與有關頒發了巴黎,紐約單一的非接觸式卡的美國,澳大利亞和歐洲夥伴的談判」。

我要查詢來獲取:

* London 
* Paris 
* New York 

我試圖

SELECT name 
FROM coutries 
WHERE ("Transport for London (TfL) is in talks with its American, Australian and European partners about issuing a single contactless card for Paris, New York") LIKE CONCAT('%', name, '%'); 

它的速度慢,不給喜歡(巴黎,紐約,歐洲,紐約確切的詞... )

我怎樣才能得到確切的單詞?

+0

@user,你不能在將它發送到SQL之前分割指定的文本嗎? – Tom 2010-10-11 09:12:59

回答

0

有這樣的查詢執行是奇怪的,你不能改變你的表結構匹配更簡單的數據?

3

你想你的句子最好分成的話你的前/中端的代碼,這樣做

SELECT name from countries where 
name in ('Transport', 'for', 'London') 

等 這樣,它會(嘗試)使用索引(如果有的話)名字。

0

就做相反的方式:

  1. 從原始文本
  2. 提取rearched字符串做一個簡單的SQL。

SELECT * 從國家 其中LIKE '%PLACE1%' 或LIKE '%place2%' ......

文本構建一個用SQL的或同時,只是幾個可行的選擇之一。

1

你需要的是全文搜索。 這應該工作:

SELECT name 
FROM coutries 
WHERE MATCH ("Transport for London (TfL) is in talks with its American, Australian and European partners about issuing a single contactless card for Paris, New York") AGAINST (name); 
+0

+1 ...並且現在僅適用於MyISAM存儲 – Unreason 2010-10-11 11:26:02