2016-03-08 50 views
0

這是更多關於我如何處理這個問題的一般問題。Php歌曲像計數器

我有一個音頻播放器。沒有關於歌曲的數據存儲在數據庫中。我想用數據庫來計算每首歌曲的喜歡度。我的問題是我將如何組織這個?

1. 如果我預先在數據庫中列出所有的歌曲,併爲喜歡的列添加一列,那麼我會在哪裏跟蹤用戶的IP地址? (不知道是否有更好的方法比使用IP地址?)所以我多次防止同一用戶投票。

2. 每次用戶喜歡一首歌,我會在數據庫中存儲{歌曲標題,如count,user ip}(也許是別的)。但是,我最終會得到不同的用戶IP地址的同一首歌的多行,所以在這種情況下,我將如何跟蹤每首歌的喜歡?

回答

0

約歌曲沒有數據存儲在數據庫中的

如果你想存儲有關每一首歌,很可能需要添加一個表中的歌曲。

不確定是否有比使用IP地址更好的方法?

如果您有一個包含用戶標識的表,請使用該表,因爲同一用戶可以從不同的IP登錄,並且不同的用戶可以從相同的IP登錄。

至於數據庫結構,你提出的可能是正確的答案。一旦您爲歌曲設置了表格,請爲專屬喜歡的專欄創建歌曲,方便您輕鬆找回歌曲。

如果您想知道哪個用戶喜歡哪首歌(以及何時),那麼您需要創建一個像您在第二點中所建議的新表。這稱爲聯結表,用於許多關係(m:m)。沒有唯一的ID。它連接兩個帶有許多鍵(用戶:歌曲)的表格並存儲兩者之間的任何關係。

  • 每當用戶喜歡的一首歌我將存儲{歌名一樣,計數,用戶IP}在數據庫中(也許別的東西)。但是,我最終會得到不同的用戶IP地址的同一首歌的多行,所以在這種情況下,我將如何跟蹤每首歌的喜歡?
  • 即使你結束了同一首歌的許多行,他們都是獨一無二的,因爲每個人都有不同的用戶喜歡它(反之亦然,你可以得到所有特定用戶喜歡的歌曲) 。您不需要在這裏存儲類似計數,因爲您可以只計算數據庫中的記錄數。 {歌曲標題,用戶標識,日期戳}會很好。

    +0

    表1 {歌曲標題,喜歡計數},表2 {歌曲標題,用戶IP,日期戳},他們只與歌曲標題連接?用戶喜歡,我填充這兩個表,如果他們還沒有喜歡(基於用戶IP)。 (我知道同一用戶可以從不同的IP登錄,不同的用戶可以從相同的IP登錄,但我不知道是否有更好的方法來跟蹤同一用戶的重複喜歡)。爲什麼我需要日期戳? – Toniq

    +0

    表1 {song_id,song_title,like_count},表2 {user_id,...},表3 {song_id,user_id}。表三(歌曲喜歡)連接用戶表和歌曲表。每次用戶喜歡一首歌曲時,新的記錄被添加到表3中。如果您擔心重複,請在將表添加到表3之前檢查記錄是否存在。 – Butsuri