【问题标题】:Php song like counter像计数器一样的php歌曲
【发布时间】:2016-03-08 03:00:55
【问题描述】:

这是一个关于我将如何处理这个问题的一般性问题。

我有一个音频播放器。数据库中没有存储有关歌曲的数据。我想使用数据库来计算每首歌的喜欢。我的问题是我将如何组织这个?

1。 如果我事先在数据库中列出我所有的歌曲并添加一列喜欢,那么我将在哪里跟踪用户 IP 地址? (不确定是否有比使用 ip 地址更好的方法?)所以我防止同一用户多次投票。

2。 每次用户喜欢一首歌时,我都会在数据库中存储{歌曲标题,如计数,用户 ip}(也许是别的东西)。但是我最终会得到多行具有不同用户 IP 地址的同一首歌曲,那么在这种情况下我将如何跟踪每首歌曲的喜欢?

【问题讨论】:

    标签: php database counter


    【解决方案1】:

    数据库中没有存储关于歌曲的数据

    如果您想存储每首歌曲的数据,您可能应该为歌曲添加一个表。

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

    如果您有一个带有用户 ID 的表,请使用它,因为同一个用户可以从不同的 IP 登录,而不同的用户可以从同一个 IP 登录。

    关于数据库结构,你提出的可能是正确的答案。一旦你为歌曲设置了一个表格,就有一个专门的列,只为你喜欢的,你可以很容易地检索它。

    如果您想知道哪个用户喜欢哪首歌(以及何时),那么您需要按照您在第二点中的建议创建一个新表格。这称为联结表,用于多对多关系 (m:m)。没有唯一的 id。它使用许多键(用户:歌曲)连接两个表并存储两者之间的任何关系。

    1. 每次用户喜欢一首歌曲时,我都会在数据库中存储{歌曲名称,如计数,用户 ip}(可能是其他内容)。但是我最终会得到多行具有不同用户 IP 地址的同一首歌曲,那么在这种情况下,我将如何跟踪每首歌曲的点赞数?

    即使您最终得到同一首歌曲的多行,它们都是独一无二的,因为每个都有不同的用户喜欢它(反之亦然,您可以获得特定用户喜欢的所有歌曲)。您不需要在此处存储类似计数,因为您可以只计算数据库中的记录数。 {song title, user id, datestamp} 就可以了。

    【讨论】:

    • table 1 {song title, like count},table 2 {song title, user ip, datestamp},他们只和歌名有关系吗?用户喜欢,我填充两个表,如果他们还没有喜欢(基于用户 ip)。 (我知道同一个用户可以从不同的 IP 登录,不同的用户可以从同一个 IP 登录,但我不知道是否有更好的方法来跟踪同一用户的重复喜欢)。为什么需要日期戳?
    • 表 1 {song_id, song_title, like_count},表 2 {user_id, ...},表 3 {song_id, user_id}。表三(歌曲喜欢)连接用户表和歌曲表。每次用户喜欢一首歌时,都会在表 3 中添加一条新记录。如果您担心重复,请在将记录添加到表 3 之前让 php 检查该记录是否存在。
    猜你喜欢
    • 2015-06-16
    • 1970-01-01
    • 2012-07-20
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    相关资源
    最近更新 更多