2016-03-23 27 views
-2

Post beğenme sistemi oluşturuyorum, PostID, UserID, Title, Content ve Likes içeren yayınlar için bir tablo oluşturdum, bıraktığım şeyin kullanıcı kimliğini içeren bir sütun olduğuna inanıyorum Bu yazıyı zaten beğendiler ve bu yüzden tekrar tekrar beğenemedikleri için, birisinin bana nasıl bir fikir vereceğini gerçekten çok isterim'Beğen' sistemi nasıl uygulanır

+1

Bu, ayrı bir tablo olmalı, gönderi tablonuzda bir sütun olmamalıdır. Likes tablosu, her ikisi de sırasıyla gönderi tablosuna ve kullanıcı tablosuna referanslar olan "PostID" ve "UserID" içerir. – Sean

+0

Eğitim * veritabanı normalleştirme * –

cevap

1

Postid & kullanıcı kodunu içeren ayrı bir tablo oluşturmanız gerekir. Böylelikle 20 kişiden hoşlanabilirsiniz, ancak kullanıcının zaten beğendiğinden emin olmak için sorgulayabilirsiniz.

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

Sonra gibiler için ayrı bir tablo: Sonra

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) 

şöyle bir şey eklerken bunu, çok basit yaparsınız önce Bu mysql tabloda gibi görünmelidir ne userid ve postid'in zaten beğenme tablosunda olup olmadığını kontrol etmek için sql sorgusu. Örneğin:

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

Sonra sadece eklemeden önce bir php sorgu yapın: Bu yardımcı olur

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

Umut!

+0

hakkında nasıl düşünmediğimi bilmiyorum, teşekkürler! –

1

Veritabanı mimarisi kurallarını ihlal etmemek için beğenileriniz kendi tablolarında olmalıdır. First Normal Form:

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

, masanız otomatik olarak ek parçaları benzersiz dizin eksileri sayesinde reddedecektir TRAINT.

+0

Teşekkür ederiz! Bu –