好的,当用户登录我的网站时,他或她被带到一个页面,在那里他们可以预览他们可能想要下载的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,或者有更好的方法来做这个?
答案 0 :(得分:3)
在一个字段中存储多个条目明显违反first normal form。
创建一个名为(例如)user_purchases
的新表,其中包含两列user_id
和item_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_id
,track_id
,paid_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
它允许您跟踪所有过去的下载,而不仅仅是上个月的下载。
您的下载过程将是:
SELECT track_id FROM user_downloads WHERE user_id=$userID and track_id=$trackID
)的下载请求(如果找到) - 让用户再次下载。维护现有的user_info
表格以跟踪可用的下载信用额度。如果你想允许信用额结转(每个月+5个学分,如果他们一个月没有使用它们,那么下一个就是10个),如果你想让用户购买更多学分,或者您有不同的帐户类型,获得超过5个学分(而不是硬编码5学分规则)
(以上SQL只是示例,总是逃避输入变量;))