這個問題的各種形式已經在這裏提到過,但我想我會再試一次。跨多列的mysql關鍵字搜索
我有一個可怕的數據庫佈局。一個單一實體(插件)分成兩個表:
CREATE TABLE widgets (widget_id int(10) NOT NULL auto_increment)
CREATE TABLE widget_data ( widget_id int(10), field ENUM('name','size','color','brand'), data TEXT)
這是小於理想。如果想要查找特定名稱,顏色和品牌的小部件,我必須在widget_data表上執行三向加入。所以我轉換成合理的表類型:
CREATE TABLE widgets (widget_id int(10) NOT NULL auto_increment, name VARCHAR(32),size INT(3),color VARCHAR(16), brand VARCHAR(32))
這使得大部分查詢好得多。但它使搜索更難。它曾經是,如果我想要搜索小部件,例如'%black%',我只需要SELECT * FROM widget_data WHERE data LIKE '%black%'
。這會給我所有黑色部件的實例,或黑洞行業或任何其他部件。我甚至可以確切地知道哪個字段匹配,並且可以顯示給我的用戶。
如何使用新的表格佈局執行類似的搜索?我當然可以做WHERE name LIKE '%black%' OR size LIKE '%black%'...
,但看起來很笨重,我仍然不知道哪些字段匹配。我可以爲每一個我想匹配的列運行一個單獨的查詢,這會給我所有的匹配以及它們如何匹配,但那會是一個性能問題。有任何想法嗎?
有問題的表是innodb,不能更改爲myisam,所以全文索引不幸成爲選項 – 2009-12-03 15:27:44
全文索引可以與InnoDB或MyISAM表一起使用,並且只能爲CHAR,VARCHAR創建或TEXT列。 – 2018-01-06 05:16:07