首先对不起我的英语......
我在数据库上有一个标签字段,我正在搜索
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
例如,当我想搜索“美国”
时结果是title1和title2,因为美国和美国标签看起来相同 字..
我怎样才能让它们与众不同?当我搜索美国时,结果应该只是title1 ...
感谢您的帮助,希望您理解我的问题..祝您有愉快的一天
编辑:
感谢 Akam 他写了解决方案
答案 0 :(得分:1)
您可以使用以下内容:
SELECT *
FROM tbl
WHERE CONCAT(' ', tags, ' ') LIKE CONCAT('% ', 'america', ' %')
请参阅小提琴here。
答案 1 :(得分:0)
你也可以使用MySQL的REGEXP代替LIKE,使用单词boundary修饰符来匹配整个单词。您的查询看起来像这样:
SELECT * FROM table WHERE tags REGEXP '[[:<:]]$keyword[[:>:]]';
如果您需要,还可以让您在单个查询中查找与任何(或全部)给定标记集匹配的行:
SELECT * FROM table WHERE tags REGEXP '[[:<:]]$keyword_one[[:>:]]|[[:<:]]$keyword_two[[:>:]]'
请注意REGEXP条件中两个表达式之间的管道|
字符,这意味着它将匹配与这些标记中至少一个匹配的任何记录。
我没有亲自测试过这种方法的性能,但是在其他StackOverflow帖子中读到它几乎等同于LIKE
开头有一个%
通配符(因为那种类型的查询将导致MySQL不使用索引)。所以我想这对你来说是最好的选择。