mysql - 显示具有相同用户 'tags' 或 'categories' 的所有帖子

标签 mysql sql database

我不确定我的方法是否是根据我的 mysql 模式执行此操作的正确方法,因为事实证明这很困难,因为用户最多可以有三个标签,而一篇帖子也最多可以有三个标签。

例如,如果一篇文章有​​标签;音乐,技术。并且用户具有标签音乐、运动。用户将能够看到该帖子,因为标签 Music 存在于用户个人资料和帖子中。

我的表格如下:

个人资料 包含以下列:

Profile_id | tag1 | tag2 | tag3

帖子有栏:

post_id | author | item | tag1 | tag2 | tag3.

表中的每个标签都与特定标签相关。例如。 tag1= 音乐,tag2= 体育等

根据用户在编辑他们的个人资料或发帖时是否勾选它,在表中插入一个标签,因此标签可以有一个值 NULL

最佳答案

理想情况下,您希望更多地规范化您的数据库。创建一个名为 Tags 并具有列 tag_id 和 tag_name 的新表将比多列更灵活。例如,如果您希望帖子有 100 个或更多标签怎么办?

创建一个管理帖子和标签之间关系的新表(即 post_tags),以及另一个用于管理标签和用户的表(user_tags)会让你做得更好.

例如,您可以根据用户的兴趣查找所有帖子:

select p.*
from users u
join user_tags ut on u.user_id = ut.user_id
join post_tags pt on ut.tag_id = pt.tag_id
join posts p on p.id = pt.post_id
where u.user_name = 'theUser'

请记住,您需要两个多对多表来拥有两个 ID 的复合键,并检查您的查询是否存在可能的重复项等。

关于mysql - 显示具有相同用户 'tags' 或 'categories' 的所有帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14859140/

相关文章:

MySQL 授予用户权限

c++ - 即使在索引表(sqlite 和 c++)之后,选择查询也很慢

mysql - SQL从时间戳获取日期

mysql - 在mysql中插入新行时如何使用触发器插入连接值

mysql - 当前MySql连接限制增加

mysql - 如果一列为空,则检查其他列

MySQL 触发新旧查询

mysql - 我如何比较两行并将两行的相似性存储在另一列中

python - 在 Python 中访问标识符映射的有效方法

数据库分区 - 水平与垂直 - 规范化和行拆分之间的区别?