在MySQL数据库中搜索标签

时间:2013-01-25 19:11:29

标签: php mysql search tags

我正在努力创建一个系统,允许用户上传项目并为其添加“标记”,以帮助他们在搜索中显示。目前,我有一个像这样工作的数据库:

id|title|tags

其中tags是用户自己输入的以逗号分隔的标记列表。我已经读到这是一种可怕的方法,但是有一个标签表并将每个ID与项目记录一起存储基本上是相同的。

我如何运行搜索以首先返回最相关的结果?我现在正在使用它,它可以工作,但不按相关性排序:SELECT * FROM items WHERE tags LIKE '%$tag%' LIMIT 0,20";其中$tag只是一个标记,没有逗号(它在循环中)。

1 个答案:

答案 0 :(得分:6)

having a tags table and storing each ID along with the item record is basically the same thing

NO。没有。没有。这绝对不是一回事。

您使用“逗号分隔列出的”版本,并尝试提出查询以解决这些问题:

  1. 从所有图书中删除标签ID#7
  2. 有多少个标题使用标记#87
  3. 使用正确规范化的表:

    1. DELETE FROM users_tags WHERE tag_id = 7
    2. SELECT count(*)FROM users_tags WHERE tag_id = 87
    3. 使用您的版本:

      1. UPDATE users_tags SET tags = ....在这里插入大量难看的字符串操作......
      2. SELECT count(*)FROM users_tags WHERE tag_id = 87 OR tag_id = '87,%'或tag_id LIKE'%,87,%'或tag_id LIKE'%,87'
      3. 看到区别?