我正在建立一个用户可以关注标签的微博客网站。就像在Twitter中一样,用户可以关注其他用户..在我的项目中,他们也可以关注标签。实现标记跟踪的数据库设计应该是什么?用户关注很容易。
一种方法是在包含帖子的表格中包含5个标签ID列:
表:帖子
列:PostID,AuthorID,TimeStamp,Content,Tag1,Tag2 ... Tag5
我将制作两个以逗号分隔的列表:一个是给定用户关注的用户,另一个是给定用户遵循的标签:$ UserFollowingList和$ TagFollowingList
,选择查询可以是:
从`Posts`中选择...其中($ Condition1)或($ Condition2)通过`PostID`decc命令...
$ Condition1 =“$ UserFollowingList中的`AuthorID`” $ Condition2 =“($ TagFollowingList中的`Tag1`)或($ TagFollowingList中的`Tag2`)...或($ TagFollowingList中的`Tag5`)”
请建议更好的方法?如果我不想限制为5个标签怎么办?我有一个想法,但想知道像你这样的开发人员会有什么经验?
答案 0 :(得分:2)
您可以使用一个表来关注谁喜欢
CREATE TABLE `followers` (
`targetID` INT(10) UNSIGNED NOT NULL,
`targetType` ENUM('user','tag') NOT NULL,
`userID` INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (`targetID`, `targetType`),
INDEX `userID` (`userID`)
)
另一个用于每个帖子中的标签,如
CREATE TABLE `postTags` (
`postID` INT(10) UNSIGNED NOT NULL,
`tag` INT(10) NOT NULL,
PRIMARY KEY (`postID`, `tag`)
)
编辑:抱歉没想到第一次。
为避免将字符串用作targetID
,还必须有tags
表格
CREATE TABLE `tags` (
`tagID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`tag` VARCHAR(255) NOT NULL DEFAULT '',
PRIMARY KEY (`tagID`)
)
这将为您提供$ currentUser正在关注的帖子
SELECT
p.*
FROM posts p
JOIN posttags pt on pt.postID = p.postID
JOIN followers f ON f.targetType = 'tag' AND f.targetID = pt.tagID
WHERE
f.followerID = $currentUserID
UNION
SELECT
p.*
FROM posts p
JOIN followers f ON f.targetID = p.authorID AND f.targetType = 'user'
WHERE
f.followerID = $currentUserID