搜索php+mysql关闭词?
首先对不起我的英语 我在数据库中有一个标签字段,我正在像这样搜索搜索php+mysql关闭词?,php,mysql,search,tags,Php,Mysql,Search,Tags,首先对不起我的英语 我在数据库中有一个标签字段,我正在像这样搜索 SELECT * FROM table WHERE tags LIKE '%$keyword%' and tags LIKE '%$keyword%' 我把标签按空格分开 america england france 我想给你看看我的桌子结构 id | title | tags 1 title1 america france 2 title2 american english 3 title3
SELECT * FROM table WHERE tags LIKE '%$keyword%' and tags LIKE '%$keyword%'
我把标签按空格分开
america england france
我想给你看看我的桌子结构
id | title | tags
1 title1 america france
2 title2 american english
3 title3 england french
例如,当我想搜索美国时
结果是标题1和标题2,因为美国和美国标签看起来一样
字
我怎样才能使它们独一无二?当我搜索美国时,结果应该只有标题1
谢谢你的帮助,希望你能理解我的问题。。祝你今天愉快
编辑:
多亏了Akam,他写了一个解决方案您可以使用这样的东西:
SELECT *
FROM tbl
WHERE CONCAT(' ', tags, ' ') LIKE CONCAT('% ', 'america', ' %')
SELECT * FROM table WHERE tags REGEXP '[[:<:]]$keyword[[:>:]]';
请参阅fiddle。您也可以使用MySQL的REGEXP,而不是像使用单词边界修饰符那样只匹配整个单词。您的查询如下所示:
SELECT *
FROM tbl
WHERE CONCAT(' ', tags, ' ') LIKE CONCAT('% ', 'america', ' %')
SELECT * FROM table WHERE tags REGEXP '[[:<:]]$keyword[[:>:]]';
这样做的额外好处是,如果您需要:
SELECT * FROM table WHERE tags REGEXP '[[:<:]]$keyword_one[[:>:]]|[[:<:]]$keyword_two[[:>:]]'
请注意REGEXP条件中两个表达式之间的pipe |字符,这意味着它将匹配至少与其中一个标记匹配的任何记录
我还没有亲自测试过这种方法的性能,但在其他StackOverflow文章中读到,它几乎相当于一个开头带有%通配符的LIKE,因为这种类型的查询将导致MySQL不使用索引。所以我想这是你最好的选择
更多信息:您可以简单地使用“关键字%”之类的标签添加一个空格?谢谢您的帮助。。祝你有愉快的一天那是个糟糕的桌子结构。你应该规范化设计。每个标记在其自己的记录中。如果相关标记位于字段的开头或结尾,并且没有前导/尾随空格,则该记录将失败。@MarcB我在类似的两侧添加了前导/尾随空格,我认为它不会失败