2011-02-07 36 views
1


ユーザーが自分のサイトにログインすると、ダウンロードしたいmp3をプレビューできるページに移動します。ダウンロードボタンをクリックすると、私のPHPスクリプトはmp3をダウンロードできるかどうかをチェックします。各ユーザーは月に5ビートをダウンロードできます。ユーザーが左5件のダウンロードを持っている場合、スクリプトはこの複数の項目を1つのフィールドに格納するmysql

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

などのデータベースを更新しますが、何らかの理由でユーザーがmp3をダウンロードする必要がある場合、再び彼は、ダウンロードを失うことになります。 これを止めるために、mp3はID番号を持っています。ユーザーがmp3をダウンロードすると、IDはpaidbeatsというフィールドに保存されます。スクリプトはデータベースを調べ、ユーザーがすでにmp3をダウンロードしたかどうかを確認します。その場合、ユーザーは再度ダウンロードするよう請求されません。ユーザーが10015のID番号を持つmp3を支払った場合、次の日に1526を購入した場合、どうすればいいですか?1つのフィールドに複数のIDを格納するにはどうすればよいですか? ?

+1

)、あなただけを使用するために管理しましたその文章全体に2つの句読点が付きます... C'mon、ピリオド、カンマは自由です。それらを使用することを恐れてはいけません。また、スペルミスや誤字を間違えないようにしても問題ありませんが、投稿をプルーフリーディングするのに1分ほどかかります。それはちょうど良いネチケットです。 –

+1

@Lèsemajestéは、問題を解決できない場合はここに投稿しないでください。 – acrs

答えて

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 

そして、それはあなたを可能に先月のものだけでなく過去のすべてのダウンロードを追跡することができます。

あなたのダウンロードプロセスは次のようになります。

  1. 見つかった場合は、ダウンロードのログ(SELECT track_id FROM user_downloads WHERE user_id=$userID and track_id=$trackID)に対して、ダウンロード要求をチェック - ユーザーが再びダウンロードしてみましょう。
  2. ユーザーがトラックを購入し、それに応じてクレジットを調整できるようにします。

既存のuser_infoテーブルを維持して、ダウンロードクレジットを追跡できます。これは、クレジットロールオーバーを許可する場合(毎月+ 5クレジット、1カ月使用しない場合は10を引き、10クレジットを購入できるようにする場合)、または(必ずご入力はvarsの脱出、SQL文の上に一例であり;)あなたは

(5クレジットルールをコーディングするのではなく、ハード)より5枚のクレジットを取得する別のアカウントの種類を持ってうわー

3

1つのフィールドに複数のエントリを格納すると、明確な違反がfirst normal formになります。

user_iditem_idの2つの列(および日付、価格などの他の列)を持つ(たとえば)user_purchasesという新しいテーブルを作成します。

各行は特定の購入を表します。

+0

これは良いアプローチですが、購入した各MP3の情報を格納するための第3のテーブル「purchase」が必要です。 –

+0

@Justin - はい、実際には 'itemid'でなければなりません。 –

+0

1か月に5回しかダウンロードできないという要件をどのように処理していますか? –

1

別のテーブルを使用して、ユーザーがダウンロードしたMP3を保存する必要があります。テーブルには、ユーザーID、MP3 ID、およびタイムスタンプが含まれている必要があります。

ソングをダウンロードするたびにテーブルにエントリを挿入できます。ユーザーが毎月のクォータ数が5を超えたかどうかを判断するには、ユーザーIDと現在の月のすべてのタイムスタンプのデータベースをSELECT COUNT(1)に照会します。

+1

@Ruduユーザーは月に5回のダウンロードに制限されています。 – mfonda

+0

@mfondaたぶん、おそらく彼らはもっと買うかもしれません(ロールオーバーやプレミアムアカウントがあります)。どちらの方法でも、前述の既存の 'user_info'テーブルOPは、新しい購入のビートクレジットを追跡でき、ダウンロードトラックテーブルはダウンロードを追跡できます。 – Rudu

+0

プレミアムアカウントがあります – acrs

1

私は、次のようなスキーマを使用して、すべてのダウンロードを追跡するために、テーブルを作成します。

user_downloads(downloadID, userID, download_date)

次に、ユーザーが曲をダウンロードするたびに、そのダウンロード用にuser_downloadsに新しいエントリを挿入します。そうすれば、曲をもう一度ダウンロードしたいのであれば、ダウンロードテーブルに既に入っているかどうかを確認し、その制限を確認したい場合は、同じユーザーに同月。

関連する問題