2011-03-31 16 views
3

次のクエリを変更して、最新のカウント値でレコードを更新する場合は、レコードがすでに存在するかどうかを確認する簡単な方法はありますか?レコードがすでに存在する場合は更新する

mysql_query("INSERT INTO daily_record (PageID, count) 
      VALUES (".$array['page_id'].",".$array['count'].")"); 

私が確認したい列はCURRENT_TIMESTAMPフィールド(record_dateは - daily_recordテーブルの一部)で今日の日付がたpageIDのために存在している場合、更新は、新たな挿入ではなく発生する必要があります。

誰かがそれが驚くべきことを手伝ってくれるならば!

+0

'record_date'は同じテーブル(' daily_record')にありますか?日付が存在するかどうか、または日付が今日の場合はどういう意味ですか? (私はそれがテーブルをクリアしない限り、とにかく昨日のために存在すると思います) – Rudu

+0

Yeah record_dateはdaily_recordにあります。日付が今日の場合、更新します。私はまだ前の日の歴史的な記録を残す必要があります...良い点... :) –

答えて

1

を言ったように:

CREATE TABLE daily_record (
    pageID INT, 
    record_date DATE, 
    count INT, 
    PRIMARY KEY (pageID,record_date), 
     INDEX idxPageID (pageID) 
) 

をあなたは、コマンドを使用できます。

INSERT INTO daily_record (
    pageID,record_date,`count` 
) VALUES (
    1,'2011-03-31',32 
) ON DUPLICATE KEY UPDATE `count`=32; 

明らかたpageID/record_date/countは、呼び出しコードによって提供されます。これは、指定されたカウントでpageID/dayのレコードを効果的に作成するか、またはpageID/dayのレコードがすでに存在する場合は、カウントを供給された値に設定します。

DATE列型を使用すると、タイムスタンプがフリーになるのを防ぐことができますが、時間/分/秒を気にしないので、このテーブルではあまり役に立ちません。

ここでのキーは、PRIMARY KEY...行によって作成されたユニークなインデックスです。一意性が挿入によって侵害された場合、代わりに更新が発生する可能性があります。

+0

非常に賢い!それはそれをするだろう。 –

+0

私は 'INDEX idxPageID(pageID)'で、特定のページのレコードを取り出そうとしていると仮定して、行数がページ数よりもはるかに多い場合(例えば1000行のデータ、10ページ)このインデックスはスクワット(とにかくテーブル全体のスキャン)を行うつもりはないので、是非ドロップしてください。ソリューションには必要ありません。 – Rudu

0

)私はどちらかとされて思い付く前もってexistanceを確認したり、最初のupdateステートメントを実行し、@@rowcount(影響を受けるレコード)をチェックし、それが0に戻ってくる場合insertを行うためにif ... thenselectを使用することができますベスト

すなわち第

0

[編集 - これは、それが原因でDATEの事で、最初に見えたよりも少し複雑です。]

あなたは更新したいカウントを取得しなければならないレコードを更新するにはので、最初にSELECTを使用する必要があります。しかし、現在の日付だけのレコードを選択する必要があります。

現在の日付を$にするコードを実行したとします。あなたはこのようなdaily_recordテーブル構築した場合

その後、ケンドリックは、まあ、

 
$result=mysql_query("SELECT * from daily_record where PageID=\'$array['page_id']\' and date_field BETWEEN '$today'.' 00:00:00' AND '$today'.' 23:59:59'"); 

if (!$result) 
    { mysql_query("INSERT into daliy_record (PageID,count} VALUES (\'$array['page_id']\',\'$array['count']\')"); } 
else 
    {mysql_query("UPDATE daily_record (count) VALUES (\'$array['count']\') where PageID=\'$array['page_id']\' and date_field=\'$result['date_field']\'");}