我把标签存储在255个varchar区域,就像这种类型;
,keyword1,keyword2,keyword3,关键词324,“keyword1234,
(关键字必须开始和结束逗号(commakeyword123comma))
-
我可以找到这样一个keyword3查询;
从表中选择*其中关键字如= '%,keyword3,%‘
CREATE TABLE IF NOT EXISTS `table1` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`tags` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `tags` (`tags`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2242 ;
INSERT INTO `table1` (`id`, `tags`) VALUES
(2222, ',keyword,'),
(2223, ',word is not big,'),
(2224, ',keyword3,'),
(2225, ',my keys,'),
(2226, ',hello,keyword3,thanks,'),
(2227, ',hello,thanks,keyword3,'),
(2228, ',keyword3,hello,thanks,'),
(2239, ',keyword3 but dont find,'),
(2240, ',dont find keyword3,'),
(2241, ',dont keyword3 find,');(报表2224 2226 2227 2228)
-
我必须更改这个命令,就像全文搜索一样。
从table1中选择*在布尔模式下匹配(标记)对(",keyword3,“)
sql命令查找2239,2240,2241,但我不想找到% keyword3 3%或keyword3
http://prntscr.com/137u9
只有想法才能找到,keyword3?
,keyword3,
谢谢
发布于 2010-10-17 15:14:37
您不能单独使用全文搜索--它只搜索单词。以下是您可以使用的几种不同的替代方法:
table1 (id,tag)值(2222,‘关键字’),(2223,‘单词不大’),(2224,'keyword3'),(2225,'my keys'),( 2226,'hello'),-/2226有三行,每个关键字有一个。(2226,'keyword3'),(2226,‘谢谢’),(2227,‘你好’),-等等.如果有可能的话,我会推荐使数据库规范化。
发布于 2010-10-17 15:22:33
是否有理由将所有标记存储在一行中?
我会把每个“标签”都存储在一排,然后按andreas的建议做,然后做如下的事情:
SELECT * FROM table1 WHERE tag IN('keyword0', 'keyword1', 'etc.')如果出于某种原因,您需要返回一行中的所有标记,则可以单独存储它们,并将它们放在一起GROUP_CONCAT。
小组
发布于 2010-10-17 15:32:12
首先,全文将用于文本搜索。所以你能用它做什么是有限制的。要做您想做的事情,您需要检查布尔模式规范,看看"操作符是否可以帮助您,但即使这样,您的搜索也可能不会100%准确。您将需要为您的关键字强制一个单词格式(最好不要在关键字中使用分隔符)。
https://stackoverflow.com/questions/3953790
复制相似问题