2016-05-31 115 views
1

因此,我正在爲我的程序編寫一個多查詢來檢查用戶是否查看過一個頁面。如果他們沒有查看它,則在名爲views的表中創建記錄,然後在名爲pages的表中更新名爲numViews的記錄,而如果他們已經查看了它,則不會發生任何事情。MySQL - 更新表IF記錄不存在於另一個表

我有寫入的代碼插入的記錄views,它保持所有記錄的唯一性。我面臨的問題是更新pages中的記錄。

僞而言,以下就是我想實現:

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

以下是我用於添加記錄查詢:

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; 

所有幫助表示讚賞。 感謝

+0

使用類似LEFT JOIN您可以讓數據庫句柄它:爲視圖表創建一個後插入觸發器,它將更新pages-table或者在需要時從視圖中的條目計算值,因此根本不需要頁面中的值(使用觸發器實際上只是一個操作加快速度)。 – Solarflare

回答

1

進行更新,如果我理解正確的..should是這樣(沒有條款)

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

完美的作品。謝謝 –

1

你在你的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 
相關問題