搜索逗号分隔的字段

时间:2011-03-22 16:33:17

标签: mysql sql-like

样本表

CREATE TABLE 
   `foo` (
        `id` INT NOT NULL AUTO_INCREMENT ,     
        `keyword_ids` VARCHAR(128) ,     
        PRIMARY KEY (`id`)  
   );

示例数据

INSERT INTO 
    `foo`
SET
    `keyword_ids` = '14,10,5,19,12'

示例查询

SELECT 
    * 
FROM 
    `foo` 
WHERE 
    (`keyword_ids` LIKE '5,%%' 
    OR 
    `keyword_ids` LIKE '%%,5' 
    OR 
    `keyword_ids` = '5' 
    OR 
    `keyword_ids` LIKE '%%,5,%%')

根据我最近的问题,这很好但是有没有办法可以改进它?

2 个答案:

答案 0 :(得分:3)

SELECT  *
FROM    foo
WHERE   FIND_IN_SET(5, keyword_ids)

但请注意,此表达式仍然不可搜索,这意味着keyword_ids上的索引无法改进此查询。

如果您希望快速搜索模型,则应该对模型进行标准化。

另一种选择是在表格中存储以逗号分隔的关键字(而不是ids)并在其上创建FULLTEXT索引:

CREATE FULLTEXT INDEX fx_foo_keyword ON (keywords)

SELECT  *
FROM    foo
WHERE   MATCH(keywords) AGAINST ('+keyword5' IN BOOLEAN MODE)

但是,这只适用于MyISAM表。

答案 1 :(得分:1)

查看FIND_IN_SET功能。