2016-05-31 11 views
1

Also, ich schreibe eine Multi-Abfrage für mein Programm, die überprüft, ob ein Benutzer eine Seite angesehen hat oder nicht. Wenn sie es nicht angezeigt haben, wird ein Datensatz in einer Tabelle mit dem Namen views erstellt, und dann wird ein Datensatz mit dem Namen numViews in einer Tabelle mit dem Namen pages aktualisiert, während, wenn sie es bereits angezeigt haben, passiert nichts.MySQL - Aktualisierung einer Tabelle IF-Datensatz existiert nicht in einer anderen Tabelle

Ich habe den Code für die Einfügung des Datensatzes auf views geschrieben, die alle Datensätze einzigartig hält. Das Problem, mit dem ich konfrontiert bin, ist, wenn es darum geht, einen Datensatz in pages zu aktualisieren.

In Pseudo Hinsicht ist die folgende, was ich will zu erreichen: einen Rekord

if (record_exits_in_table_named_views == false) { 
    UPDATE record IN pages 
    INSERT record INTO views 
} 

Hier finden Sie meine Anfrage für das Hinzufügen von:

INSERT INTO views 
    (`pageID`, `viewerID`) 
SELECT 
    T.* 
FROM 
    (SELECT 
     '.$this->pageID.' pageID, 
     '.$_SESSION['userID'].' viewerID 
    ) 
T LEFT JOIN 
    views 
ON 
    views.creationID = T.pageID 
AND 
    views.viewerID = T.viewerID 
WHERE 
    views.viewerID IS NULL; 

Alle Hilfe ist willkommen. Dank

+0

Sie könnten der Datenbank-Handle lassen it: Erstellen Sie einen After-Insert-Trigger für die View-Tabelle, der die Pages-Tabelle aktualisiert oder einfach den Wert aus den Einträgen in Sichten berechnet, wenn Sie sie brauchen, so dass Sie den Wert in Seiten gar nicht benötigen (mit dem Trigger) wäre eigentlich nur eine OP timization, um es zu beschleunigen). – Solarflare

Antwort

1

für das Update, wenn ich recht verstehe ..should dies sein (nicht in Klausel)

update pages 
set numViews =numViews +1 
where (pageID, viewID) not in (select pageID, viewID from views) 
+0

Funktioniert perfekt. Vielen Dank –

1

Sie verwenden eine ähnliche LEFT JOIN in Ihrem UPDATE

UPDATE pages AS p 
LEFT JOIN views AS v ON v.pageID = p.pageID AND v.viewerID = viewerID 
SET p.numViews = p.numViews + 1 
WHERE p.pageID = {$this->pageID} AND p.viewerID = {$this->viewerID} 
AND v.viewerID IS NULL 
Verwandte Themen