gpt4 book ai didi

php - 将标签插入表格的最有效方法是什么

转载 作者:行者123 更新时间:2023-11-29 02:37:58 25 4
gpt4 key购买 nike

我有以下表格;

CREATE TABLE IF NOT EXISTS `tags` (
`tag_id` int(11) NOT NULL auto_increment,
`tag_text` varchar(255) NOT NULL,
PRIMARY KEY (`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;


CREATE TABLE IF NOT EXISTS `users` (
`user_id` int(11) NOT NULL auto_increment,
`user_display_name` varchar(128) default NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

CREATE TABLE IF NOT EXISTS `user_post_tag` (
`upt_id` int(11) NOT NULL auto_increment,
`upt_user_id` int(11) NOT NULL,
`upt_post_id` int(11) NOT NULL,
`upt_tag_id` int(11) NOT NULL,
PRIMARY KEY (`upt_id`),
KEY `upt_user_id` (`upt_user_id`),
KEY `upt_post_id` (`upt_post_id`),
KEY `upt_tag_id` (`upt_tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

CREATE TABLE IF NOT EXISTS `view_post` (
`post_id` int(11)
,`post_url` varchar(255)
,`post_text` text
,`post_title` varchar(255)
,`post_date` datetime
,`user_id` int(11)
,`user_display_name` varchar(128)
);

我的想法是,我想使用最有效的方式为帖子和用户保存标签。只需添加一个帖子,我就会在该帖子和用户中传递几个标签。稍后我希望能够计算每个用户和帖子的选项卡。与 Stack Overflow 非常相似。

我想'tag_text' 应该是唯一的?如果有效,我每次提交新帖子时都会运行一个函数来检查“标签”表以检查标签是否已经存在,如果是,则返回其“tag_id”以便我可以将其插入“user_post_tag”表.

这可能是解决此类问题的糟糕方法。

欢迎所有建议。

最佳答案

是的,你正在做的是最好的方法。您创建了一个 n 到 m 的关系,因为一个帖子可以有多个标签,而同一个标签可以在多个帖子上。您不想存储每个帖子的标签名称,因此您存储了 id。

但是,您不应该为同一用户多次存储相同的 tag_id。如果用户有多个标签并且您必须为每个标签执行 SELECT count(...) ,这将严重影响您的服务器。你明白我在说什么吗?因为现在,如何获得用户A拥有标签B的次数?您必须执行 SELECT count(*) FROM user_post_tag INNER JOIN tags ON (...) WHERE user_id=A and tag_id=B

我的建议是将 user_post_tag 分成两个表:

  1. user_tags,要计算用户有多少次这个标签,主键是user_idtag_id,你有一个count 字段,每次该用户使用该标签发布新帖子时,您只需使用 count=count+1 更新该字段。这样,您只需执行 SELECT tag_text, count FROM user_tags INNER JOIN tags ON (...) WHERE user_id=A 即可选择给定用户的所有标签(使用次数)。您正在使用完全索引的查询。你不是在要求 MySQL 检查表格,寻找一堆行并计算它们,你是在告诉 MySQL,在这个表和另一个表中找到这一行,加入它们并给我,快!
  2. post_tags,用于存储某个帖子的标签,主键是post_idtag_id,不需要额外的字段。<

I suppose that the 'tag_text' should be unique? Is if effective that I run a function each time I submit a new post to go through the 'tags' table to check if a tag already exists, and if yes, return its 'tag_id' so I can insert it into 'user_post_tag' table.

是的,它应该是独一无二的。最好在插入之前检查标签是否存在,如果不存在则插入,而不是有冗余并且必须执行 SELECT ... count(*) 以了解标签已使用了多少次。与帖子选择相比,帖子创建的频率要低得多,因此如果您必须在插入和选择的查询密集型之间做出选择,当然选择插入。

顺便说一句,如果你想知道有多少帖子有相同的标签,比如在堆栈溢出中,你需要另一个表,主键 tag_id,然后,比如 user_tags,每次帖子获得特定标签时,您都会增加 count 字段。

关于php - 将标签插入表格的最有效方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2009595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com