2015-09-05 49 views
0

我有一個存儲的郵政/郵政編碼列出一個表:我不能讓MySQL全文搜索工作

CREATE TABLE IF NOT EXISTS `postal_codes` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `codes` text NOT NULL, 
    PRIMARY KEY (`id`), 
    FULLTEXT KEY `codes` (`codes`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3; 

INSERT INTO `postal_codes` (`id`, `codes`) VALUES 
(1, '30301\r\n30302\r\n30303'), 
(2, '90001\r\n90002\r\n90003\r\n90004\r\n90005'); 

我需要檢查某行是否含有一定郵政/郵政編碼。但是,它不起作用。例如,此查詢返回ID爲2的行,但'codes'列不包含'dfgdfgdfgdf'。這是爲什麼?

SELECT * 
FROM postal_codes 
WHERE MATCH(codes) AGAINST('+dfgdfgdfgdf' IN BOOLEAN MODE) AND id='2' 

回答

1

FULLTEXT因在小桌子上奇怪地工作而臭名昭着。在放棄之前,您可能會嘗試用幾千行不重複的測試數據填充郵政編碼表。

(我假設你已經想過在你的郵政編碼表中規範化數據,所以每個郵政編碼都有一行。這是一種更強大的方式來處理你想要做的那種數字標記搜索)

+0

感謝您的回答!你是對的,我想過正常化數據。使用全文搜索將是一種更簡單的方式來完成我在應用程序中所要做的事情,但現在我知道這並不可靠,我想我會對數據進行標準化。 – Jeff