【问题标题】:how to get related posts with comma separated tagging system for PHP and MySQL? [closed]如何使用逗号分隔的 PHP 和 MySQL 标记系统获取相关帖子? [关闭]
【发布时间】:2012-10-11 20:29:52
【问题描述】:

我正在创建一个使用 PHP 和 MySQL 发布相关网站的网站。我正在为这个网站使用一个带有逗号分隔标签的标签系统,例如我的标签看起来像:php、mysql、code、programming

我使用这个逗号分隔的标签系统的原因是因为我希望用户能够为他的帖子插入他想要的任何类型的标签

我已经从这个网站和互联网上进行了搜索,但答案与我的问题并不真正相关。许多标记系统使用三个表,如 item、tag_map 和 tag,我认为它不适用于逗号分隔的标记系统。

到目前为止,我已经创建了一个包含名称和标签字段的表。我发现的最佳解决方案是使用 Tf–idf, term frequency–inverse document frequency 来衡量帖子相对于其内容的权重。

还有其他好的解决方案吗?如果没有,如果有人可以使用 php 代码解释这个 tf-idf 示例,我真的很感激。

【问题讨论】:

  • 所以您希望每条记录中的单个字段看起来像tag1,tag2,tag3,tag4,...?那是糟糕的设计。它否定了使用关系数据库来存储您的信息的意义,并使对标签频率和/或操纵标签进行任何分析变得非常痛苦。
  • 是的,我试过把它分成post表和tag表,但它是一对一的关系,我认为是一样的。
  • 您找不到有关如何执行此操作的资源是有原因的 - 因为这是错误的方法。
  • 我认为它不适用于逗号分隔的标记系统 - 不适用于演示或持久性?
  • 还有其他好的方法来实现这个吗?因为我希望用户可以为他的帖子添加自己的标签。如果我使用 3 表设计,它将使我的数据库变得非常大。

标签: php database web tags tagging


【解决方案1】:

这不是它不应该做的方式,就像 cmets 所说的那样。你应该把它分成三个表:

存储帖子本身的表;

Table posts
-----------
id
text

所有标签的表格;

Table tags
-----------
id
name

最后是一张连接两者的表;

Table postTags
-----------
id
postId
tagId

从这些中选择数据时,您可以使用如下查询:

SELECT * FROM posts p
INNER JOIN postTags pt ON pt.postId = p.id
INNER JOIN tags t ON pt.tagId = t.id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 2021-06-12
    • 2015-03-10
    • 2012-05-23
    • 1970-01-01
    相关资源
    最近更新 更多