MySQL-存储标签和搜索确切标签的最佳方法

时间:2018-11-12 20:38:21

标签: php mysql tags

我在使用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%'

但是我得到了这3条记录,因为-

  • ,写作,编辑
  • 货币, ny,美元
  • sus 版本,很快

我只想要记录1,当我搜索关键字pen

1 个答案:

答案 0 :(得分:1)

  1. 如上所述,请勿将所有标签存储在单列中,请对其进行规范化。例如,您应该具有实体表(包含Pen,Car等),标签表(钢笔,铅笔,便士等)和关系表,它们将在索引的两列中包含两个表的ID。

  2. 在当前架构中,您可以从以下位置更改搜索条件:

    LIKE '%pen%' to = 'pen' OR LIKE 'pen, %' OR LIKE '% pen, %' OR LIKE '% pen'

    但是您知道,无论如何这都是丑陋的解决方案。...