我有这样一张桌子:
+-------------------+---------------+ | description | colour | +-------------------+---------------+ | Macrame Dress | Washed Black | | Darcelle Gilet | Dirty Shellac | | Darcelle Cardigan | Washed Black | | Let It Rot Vest | Optic White | | Let It Rot Crew | Washed Black | | Let It Rot Crew | Optic White | | Battalion Short | Somme | | Seine Dress | Washed Black | | Seine Dress | Cocomotion | | Odette V-neck | Linen Marl | +-------------------+---------------+
我想搜索它为“黑色礼服”,它只返回第1行和第1行. 8.如果我输入“黑色”,它将返回第1,3,5和1行. 8.连衣裙应该返回第1,8和8行. 9.
任何人都可以想到一个非常优雅,漂亮的sql,它将采用任意数量的搜索词并返回最简洁的结果集.我可以想到一些非常丑陋的方法来做这件事,但是他们打乱了我的业力.
最佳答案
我能想到的唯一不错的解决方案(业力方面)将涉及使用FULLTEXT索引.这将允许您使用这样的查询:
SELECT * FROM mytable
WHERE MATCH (description,color) AGAINST ('black dress');
不幸的是,如果我没记错的话,FULLTEXT索引需要MyISAM表类型.
编辑
我怀疑这是你正在寻找的,但让我为了讨论添加它.您可以将数据复制到临时MyISAM表中,然后对其进行全文搜索:
CREATE TEMPORARY TABLE mytmptable ENGINE=MyIsam SELECT * FROM mytable;
ALTER TABLE mytmptable ADD FULLTEXT KEY (description,color);
SELECT * FROM mytmptable WHERE MATCH (description,color) AGAINST ('black dress');