2016-03-23 6 views
-2

私はポスト好きなシステムを作成しています。PostID、UserID、Title、Content、Likesを含む投稿用のテーブルを作成しました。残ったものは、usersID誰もが投稿を好きだったので、何度も何度も気にすることはできません。どうすればいいかわかります。'likes'システムを実装する方法

+1

これは別のテーブルであり、投稿テーブルの列ではありません。 Likesテーブルには 'PostID'と' UserID'があり、両方ともpostsテーブルとuserテーブルへの参照です。 – Sean

+0

研究*データベースの正規化* –

答えて

1

postidの&ユーザーIDを保持する別のテーブルを作成する必要があります。あなたはコメントを好きな20人にすることができますが、あなたはすでにユーザーがそれを好きだったかどうかを確認するためにクエリできます。あなたがそうする前に、などを追加しているときに

Table (likes) 
----------------- 
LikeID (Just to make sure you have an index key) 
UserID (This would be the user id of user adding like) 
PostID (This post id would be from the comments table) 
LikedDate (this is optional) 

、非常に簡単な操作を行います。その後

Table (comments) 
----------------- 
PostID 
UserID 
Title 
Content 

好きのための別のテーブル:これは、MySQLのテーブルにどのように見えるかですuseridとpostidが既にlikesテーブルにあるかどうかを確認するためのsqlクエリ。たとえば:

SELECT LikeID FROM likes_table WHERE UserID = ***** AND PostID = ***** 

その後、あなたは、単に追加する前に、PHPのクエリを実行します。

if($rows_returned == 0){ 
//add the like to likes table 
}else{ 
//throw an error that the like has already been added 
} 

・ホープこのことができます!

+0

完璧、ありがとう! –

1

データベースアーキテクチャのルールに違反しないように、 First Normal Form:この時点で

CREATE TABLE `PostLike` (
    `UserID` CHAR(15) REFERENCES `User`(`Id`) ON DELETE CASCADE, 
    `PostID` CHAR(15) REFERENCES `Post`(`Id`) ON DELETE CASCADE, 
    UNIQUE INDEX (`UserID`,`PostID`) 
) 

、あなたのテーブルが自動的に挿入を拒否する固有のインデックス短所のおかげでtraint。

+0

ありがとう!私はこのことについてどう考えなかったかわかりません –

関連する問題