0

私はこのボードのすべてのようにPHPとMySQLにあまり熟練していないので、いくつかのサポートが必要です:)それで、事前に感謝します。

PHPスクリプトを使用して外部の解析済みXMLフィードからのデータを保存しています。このスクリプトは、MySQLデータベースをCRONジョブで1日2回更新します。これは、そのようなPHPスクリプトの一部です。

mysql_query("UPDATE my_table SET amount=$jackpot->amount WHERE gameId = '".$jackpot->gameId."'")
or die(mysql_error());

これにより、データベースのテーブルと行が更新されます。このテーブルは次のように構成されています(列):

gameId | gameName | 金額| 通貨| 日にち

ここで、「日付」列はDATE形式(dd / mm / yyyy hh:mm)、CURRENT_TIMESTAMP ONUPDATECURRENT_TIMESTAMPです。

必要なもの...はい、このテーブルを1日2回更新する必要がありますが、DATEの変更時に同じ列を持つ新しい行を挿入する必要もあります(毎日、新しい日->新しい行)。

私は2つの言葉で(コーディングなしで)似たようなことを考えています:

if today --> update rows
elseif date change (another day, so "tomorrow") --> INSERT new row with updated data (collected from the XML feed)

これどうやってするの?MySQLクエリで現在のデータを確認してから、PHP経由で新しい行を挿入する必要がありますか?または、PHP行の束でクエリをスキップできますか?

申し訳ありませんが、私は少し混乱しています...どんな助けでも本当にありがたいです!

繰り返しになりますが、すべてに感謝します!

4

3 に答える 3

2

シンプルに保つことをお勧めしdupedateます。挿入日のみを保存する新しいフィールドを追加します。その上に一意のキーを置くと、それは次のような単純な問題です。

INSERT INTO (gameID, gameName, ammount, currency, date, dupedate) VALUES (...)
ON DUPLICATE KEY UPDATE amount=xxx

既存のレコードと同じ日付のレコードを「挿入」すると、更新が取得されます。新しい日付(例:「明日」)の場合は、代わりに新しいレコードを取得します。

これには、最初の「フェッチ/チェック/更新|挿入」バージョンのように競争力がないという利点もあります。このようなプロセスでは、他のプロセスがロジックを複製し、レコードをフェッチしてから挿入/更新を行うまでの間に、新しいレコードを下からスナイプする可能性があります。

于 2013-01-17T14:46:47.967 に答える
2

私が正しく理解していれば、1日に2回データを挿入/更新して(回数は重要ではありませんが)、一意の日付ごとに1行のデータを作成できるようにしたいと思いますか?

date列にUNIQUEインデックスを作成し、クエリにINSERT ... ON DUPLICATE KEY UPDATE構文を使用すると、単一のクエリでこれを実現できます。例えば

INSERT INTO my_table (amount, currency, date) VALUES (....)
ON DUPLICATE KEY UPDATE amount = '....';

必要に応じて列を再割り当てするのではなく、列の値を簡単にインクリメントできます。これを行うには、クエリの更新部分は次のようになります。UPDATE amount = amount + ....

于 2013-01-17T14:46:55.997 に答える
0

新しいゲームが追加されていないことが絶対に確実でない限り、クエリを使用して、一致する行がすでに存在するかどうかを確認する必要があります。

スクリプトが午前1時と午後1時に実行され、午前1時にのみ新しい行を作成する場合、午前2時に新しいゲームを追加すると(外部xml、バックエンド、またはその両方で)エラーが発生します。

于 2013-01-17T14:48:31.940 に答える