2010-10-17 85 views
0

我在255 varchar區域存儲標籤,就像這種類型;全文搜索 - 標籤系統問題

「關鍵詞1,關鍵詞,KEYWORD3,鍵字324」,keyword1234,

(關鍵字必須開始和結束逗號(commakeyword123comma))

-

我可以找到一個像這樣的sql查詢的關鍵字3;

SELECT * FROM表,其中關鍵字像= '%,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)

-

我必須將其更改爲完整文本搜索命令。

SELECT * FROM table1的地方(在布爾模式 「KEYWORD3」)匹配(標籤)對

SQL命令找到2239,2240,2241,但我不希望找到%KEYWORD3%或KEYWORD3

http://prntscr.com/137u9

想法只找到,KEYWORD3,?

,KEYWORD3,

謝謝

+0

你有沒有試過從WHERE'word' IN標籤中選擇X? – Andreas 2010-10-17 15:15:48

回答

3

您不能單獨使用全文搜索這一點 - 它僅搜索詞。這裏有幾個不同的選擇,你可以使用:

  • 您可以使用全文搜索快速找到候選行,然後後記使用LIKE因爲你已經在做,從全文過濾掉任何錯誤匹配搜索。可以使用FIND_IN_SET

  • 您可以規範化您的數據庫 - 每行只能存儲一個關鍵字。

    INSERT INTO `table1` (`id`, `tag`) VALUES 
    (2222, 'keyword'), 
    (2223, 'word is not big'), 
    (2224, 'keyword3'), 
    (2225, 'my keys'), 
    (2226, 'hello'), -- // 2226 has three rows with one keyword in each. 
    (2226, 'keyword3'), 
    (2226, 'thanks'), 
    (2227, 'hello'), 
    -- etc... 
    

那些我建議normalizing your database如果在所有可能。

+0

你好 我不能只存儲每行一個關鍵字。 – ediz 2010-10-17 15:21:40

+2

這通常用作另一個表中主要信息行的連接表。它將多個標籤與一個ID值相關聯。這是如何在SQL中存儲每行項目的列表。 – bobince 2010-10-17 15:33:51

0

是否有理由將所有標籤存儲在一行中?

我想每一個「標籤」存儲在一排然後做如安德烈亞斯建議,做這樣的事情:

SELECT * FROM table1 WHERE tag IN('keyword0', 'keyword1', 'etc.') 

如果需要,出於某種原因,返回所有的標籤在一排,你可以單獨存儲它們並將它們一起存儲。所有全文

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

0

首先旨在用於文本搜索。所以你可以用它做什麼是有限制的。要做你想做的事情,你需要檢查Boolean Mode規範,看看"運營商是否可以幫助你,但即使這樣,你的搜索可能不是100%準確。你需要爲你的關鍵字設置一個字格式(最好不要在之類的文字分隔符)。