mysql在一个Field中存储多个条目

时间:2011-02-07 16:06:28

标签: php mysql


好的,当用户登录我的网站时,他或她被带到一个页面,在那里他们可以预览他们可能想要下载的mp3。当他们点击下载按钮时,我的php脚本会检查他们是否可以下载mp3。每个用户每月可以下载5次节拍。如果用户剩下5次下载,则脚本会像这样更新数据库

$q=mysql_query("UPDATE user_info SET mdr = '4' WHERE username = '$y'");

但是如果用户由于某种原因必须再次下载mp3,他将失去下载。 所以要停止这个,每个mp3都会有一个ID号。因此,当用户下载mp3时,其ID将保存在名为paidbeats的字段中。该脚本将查看数据库并检查用户是否已经下载了mp3;如果是这样,用户将无需再次下载。如果用户支付了id为10015的mp3,然后第二天他购买了1526,那我该怎么做呢?我怎么能在一个字段中存储多个ID,或者有更好的方法来做这个?

4 个答案:

答案 0 :(得分:3)

在一个字段中存储多个条目明显违反first normal form

创建一个名为(例如)user_purchases的新表,其中包含两列user_iditem_id(可能还有其他列,包括日期,价格等)。

每一行代表特定的购买。

答案 1 :(得分:1)

您应该使用单独的表来存储用户下载的MP3。该表需要包含用户ID,MP3 ID和时间戳。

每次下载歌曲时,您都可以在表格中插入一个条目。要确定用户是否已超过其每月5的配额,请在数据库中查询SELECT COUNT(1)以获取用户ID以及当月的所有时间戳。

答案 2 :(得分:1)

我会创建一个表来跟踪所有下载,其架构类似于以下内容:

user_downloads(downloadID, userID, download_date)

然后,每当用户下载歌曲时,您都会在user_downloads中为该下载插入新条目。这样,如果他们想再次下载一首歌,你可以检查它是否已经在下载表中,如果你想检查它们的限制,请确保同一个用户在表中没有五个条目用于同月。

答案 3 :(得分:1)

为什么不保留跟踪下载/用户的表格(与节拍使用无关)。该表格(例如user_downloads)可以有user_idtrack_idpaid_date(可选)。

这样您就可以在用户购买曲目时向用户报告:

SELECT track_id,paid_date FROM user_downloads WHERE user_id=$userID

它允许您跟踪特定曲目的所有下载:

SELECT user_id,paid_date FROM user_downloads WHERE track_id=$trackID

它允许您跟踪所有过去的下载,而不仅仅是上个月的下载。

您的下载过程将是:

  1. 检查下载日志(SELECT track_id FROM user_downloads WHERE user_id=$userID and track_id=$trackID)的下载请求(如果找到) - 让用户再次下载。
  2. 允许用户购买曲目并相应调整其积分。
  3. 维护现有的user_info表格以跟踪可用的下载信用额度。如果你想允许信用额结转(每个月+5个学分,如果他们一个月没有使用它们,那么下一个就是10个),如果你想让用户购买更多学分,或者您有不同的帐户类型,获得超过5个学分(而不是硬编码5学分规则)

    (以上SQL只是示例,总是逃避输入变量;))