2013-02-10 10 views
12

I次の表の構造を持っている:行が存在する場合は、MySQLテーブルを更新する最速の方法です。挿入します。 2つ以上の非ユニークキー

$checkq = mysql_query("SELECT count(*) as rowexist FROM reports WHERE day='$day' AND uid='$uid' AND siteid='$sid' AND cid='$cid'") or die(mysql_error()); 
$checkr = mysql_fetch_array($checkq); 

if ($checkr['rowexist'] > 0) { 
mysql_query("UPDATE reports_adv SET visits=visits+1 WHERE day='$day' AND uid='$uid' AND siteid='$sid' AND cid='$cid'"); 
} else { 
mysql_query("INSERT INTO reports_adv SET day='$day', uid='$uid', siteid='$sid', cid='$cid', visits='1'"); 
} 

このMySQLを更新する最速の方法です:現在、私は次のスニペットと&挿入/更新をチェック

CREATE TABLE IF NOT EXISTS `reports` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `day` int(11) NOT NULL, 
    `uid` int(11) NOT NULL, 
    `siteid` int(11) NOT NULL, 
    `cid` int(3) NOT NULL, 
    `visits` int(11) NOT NULL, 
    PRIMARY KEY (`id`) 
) 

行が存在する場合はテーブル、それ以外のキーは2つ以上挿入しないでください。

答えて

17

だけINSERT...ON DUPLICATE KEY UPDATE

INSERT INTO reports_adv (day, uid, siteid, cid, visits) 
VALUES ('$day', '$uid', '$sid', '$cid', 1) 
ON DUPLICATE KEY UPDATE visits=visits+1; 

が、何かする前に、あなたが列にUNIQUE制約を定義する必要がありますを使用しています。

+0

ありがとうございます。よく働く。 – dracosu

+0

あなたは歓迎です: 'D' –

+0

もう1つ質問があります。とき私はどこの日、uid、siteidとcidを使用してデータを表示します。どのインデックスを追加する必要がありますか? – dracosu

関連する問題