2013-02-10 6 views
12

Ich habe die Struktur folgende Tabelle:Schnellste Möglichkeit, um eine MySQL-Tabelle zu aktualisieren, wenn Zeile existiert sonst einfügen. Mehr als 2 nicht-eindeutige Schlüssel

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`) 
) 

i & Einsatz Derzeit prüfen/Update mit dem folgenden Ausschnitt:

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

Ist ein schnellster Weg, um diese MySQL zu aktualisieren Tabelle wenn Zeile existiert sonst einfügen mit mehr als 2 nicht eindeutigen Schlüsseln?

Antwort

17

verwenden nur 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; 

aber vor allem anderen, sollten Sie eine UNIQUE Einschränkung für die Spalten definieren.

ALTER TABLE reports_adv ADD CONSTRAINT tb_uq UNIQUE (day, uid, siteid, cid) 
+0

Vielen Dank. Funktioniert super. – dracosu

+0

du bist willkommen ': D' –

+0

Noch eine Frage. Wenn ich die Daten zeige, die ich an WO-Tag, uid, siteeid und cid verwende. Welche Indizes soll ich hinzufügen? – dracosu