2012-07-23 30 views
1

我正在製作一個微博客網站,用戶可以關注標籤。就像twitter一樣,用戶可以關注其他用戶..在我的項目中,他們也可以跟隨標籤。數據庫設計應該如何實現標籤跟蹤?用戶關注很容易。如何在數據庫中實現標籤以下內容?

一種方法是有一個像在表5標籤ID列包含職位:

表:帖子
列:帖子ID,屬於AuthorID,時間戳,內容,Tag1中,與Tag2 ... Tag5

我會做兩個逗號分隔的列表:一個是對給定用戶能與用戶和其他爲標籤的給定用戶以下內容:$ UserFollowingList和$ TagFollowingList

和選擇查詢可以是這樣的:

選擇...從`Posts`哪裏($條件1)或($條件2)爲了用'PostID`遞減...

$條件1 = 「`AuthorID`在$ UserFollowingList」
$條件2 =「 ($ TagFollowingList中的`Tag1`)或($ TagFollowingList中的`Tag2`)...或($ TagFollowingList中的`Tag5`)「

請建議更好的方法?如果我不想限制爲5個標籤呢?我有一個想法,但想知道什麼會像開發人員那樣經歷開發人員?

回答

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`) 
) 

編輯一個表:對不起,沒想到它的1 - 時間。 要避免使用字符串作爲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 
+0

雅這些表都很好,我的問題是如何實現標籤*以下*系統。 – ken 2012-07-23 18:06:45

+0

請給我一些時間來研究'join'關鍵字。 – ken 2012-07-23 18:26:59

相關問題