在MySQL数据库中搜索标签

PGR*_*PGR 0 php mysql tags search

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

id|title|tags
Run Code Online (Sandbox Code Playgroud)

tags用户自己输入的标记的逗号分隔列表在哪里.我已经读过这是一种可怕的方法,但是拥有一个标签表并将每个ID与项目记录一起存储基本上是一回事.

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

Mar*_*c B 6

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

没有.没有.没有.这绝对不是一回事.

你把你的"逗号分隔列出"版本,并尝试提出查询来完成这些问题:

  1. 从所有标题中删除标签ID#7
  2. 标题#87有多少个标题

使用正确规范化的表:

  1. DELETE FROM users_tags WHERE tag_id = 7
  2. SELECT count(*)FROM users_tags WHERE tag_id = 87

随你的版本:

  1. UPDATE users_tags SET tags = ....在这里插入大量丑陋的字符串操作...
  2. SELECT COUNT(*)FROM users_tags WHERE TAG_ID = 87 OR TAG_ID = '87,%" OR TAG_ID LIKE '%,87%,%' 或TAG_ID LIKE '%,87'

看到不同?

  • @PGR所以你需要3个表:items(id,title)tags(id,tag)itemTags(id,itemid,tagid) (2认同)