样本表
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,%%')
根据我最近的问题,这很好但是有没有办法可以改进它?
答案 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功能。