这个问题在这里已经有答案了:
在数据库列中存储分隔列表真的那么糟糕吗(10个答案)
两年前关门了。
我有问题与mysql搜索标签正确。
目前我正在存储这样的标签-
id | name | tags
======+==========+============================
1 | Pen | pen, pencil, writings, edit
------+----------+----------------------------
2 | Money | currency, penny, dollar
------+----------+----------------------------
3 | Car | suspension, fast
------+----------+----------------------------
目前,我正在使用此代码以id 1名称笔为目标(记录1)
SELECT * FROM ____ WHERE tags LIKE '%pen%'
但我得到这三张唱片是因为-
钢笔、铅笔、文字、编辑
货币,便士,美元
悬架,快速
我只想要记录1,当我搜索关键字笔
1条答案
按热度按时间vshtjzan1#
如上所述,不要将所有标记存储在一个列中,而是将其规范化。例如,您应该有实体表(包含pen、car等)、标记表(pen、pencil、penny等)和关系表,它们将在索引中的两列中包含来自两个表的id。
在当前架构中,可以从以下位置更改搜索条件:
LIKE '%pen%' to = 'pen' OR LIKE 'pen, %' OR LIKE '% pen, %' OR LIKE '% pen'
.但你知道,这是一个丑陋的解决方案。。。。