2013-03-20 63 views
-4
tag1 - Novel, My pession, Holi, Book, My book, Having book 
tag2 - Holi Novel, My pession, Book, My book, Having book 
tag3 - Romantic Novel, My Novel, Book, My book, Having book 
tag4 - Novel based, My Novel, Book, My book, Having book 
tag5 - Ovel based, My Novel, Book, My book, Having book, Novel 
tag6 - Based, My Novel, Book, Novel, Having book, Presume 

我想只搜索那些有Novel的标签。它应该是搜索tag1tag5 在全文检索Mysql全文搜索特定字

+0

阅读:http://whathaveyoutried.com – 2013-03-20 08:28:47

+1

你真的应该考虑[标准化](HTTPS://en.wikipedia .org/wiki/Database_normalization),如果你想要性能和可维护性。 – rid 2013-03-20 08:32:44

+0

是的,所以你应该在这里有三个表:'book','tag'和'book_tag',最后一个具有另外两个外键。然后使用'JOIN's做一个更快的方法。 – halfer 2013-03-20 08:50:50

回答

1

我通常每个关键字存储在下列方式

,Novel,My Passion,Holi, 

即逗号在开始和字符串的结尾,所以现在不是小说,你可以搜索'%,Novel,%'LIKE命令,它的作品就像一个魅力。

+0

我们不能这样做,因为我们无法更新20个lacs记录 – bhupendra 2013-03-20 08:43:02

+0

从您的示例中,它是简单的更新查询更新表set column =“,”+ column +“,”并且记录格式良好。或者作为其他评论者,您应该将其标准化以获得更快的结果。记住TEXT搜索是最慢的。 – 2013-03-20 08:45:49

+0

我刚刚阅读其他答案,你真的没有选择,只能按照我的经验:)我的建议。或者进行正常化的方式。 – 2013-03-20 08:47:15

1

SELECT * FROM your_table WHERE受试者LIKE '小说'

UNION

SELECT * FROM your_table WHERE受试者LIKE '小说,%'

UNION

SELECT * FROM your_table 哪里有题目喜欢'%,小说,%'

UNIO ñ

SELECT * FROM your_table WHERE主题LIKE '%,小说'

+0

谢谢,但对我们的数据库来说太重了,因为我们有超过20个紫胶。和这个查询杀死我们的查询并且花费超过40秒。 – bhupendra 2013-03-20 08:39:17

2
WHERE 
    tag1 REGEXP '(^|,)[[:<:]]Novel[[:>:]](,|$)' AND 
    tag5 REGEXP '(^|,)[[:<:]]Novel[[:>:]](,|$)' 
+0

摆脱感谢,但它正在搜索所有标签,而不是tag1和tag5 – bhupendra 2013-03-20 08:36:57

+0

@bhupendra,更新的例子,猜测'tag1'和'tag5'是列。 – rid 2013-03-20 08:38:02

+0

@bhupendra你需要'SELECT * FROM表WHERE(标签LIKE'%NOVEL,%'或标签LIKE'%NOVEL%'或标签LIKE'%,NOVEL%')' – 2013-03-20 08:38:57