2016-03-08 55 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