3

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

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

チェックしたい列はCURRENT_TIMESTAMPフィールド(record_date-daily_recordテーブルの一部)です。pageIDに今日の日付が存在する場合は、新しい挿入ではなく更新を行う必要があります。

誰かが助けることができればそれは素晴らしいでしょう!!!

4

3 に答える 3

1

daily_record次のようにテーブルを作成するとします。

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...行によって作成された一意のインデックスです。その一意性が挿入によって侵害される場合は、代わりに更新が発生する可能性があります。

于 2011-03-31T18:50:59.370 に答える
0

私が思いつくことができる最善の方法は、selectwithを使用しif ... thenて事前に存在を確認するか、update最初にステートメントを実行し、チェック@@rowcount(影響を受けるレコード) を実行し、insert0 が返された場合に実行することです)

すなわちいいえ。

于 2011-03-31T18:18:09.477 に答える
0

[編集 - これは、DATE の関係で、最初に思っていたよりも少し複雑です。]

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

$today に現在の日付を取得するコードを実行したと仮定しましょう。

それからケンドリックが言ったように、

$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'");

もし (!$結果)
   { mysql_query("INSERT into daliy_record (PageID,count} VALUES (\'$array['page_id']\',\'$array['count']\')"); }
そうしないと
   {mysql_query("UPDATE Daily_record (count) VALUES (\'$array['count']\') where PageID=\'$array['page_id']\' and date_field=\'$result['date_field']\ '");}
于 2011-03-31T18:42:52.327 に答える