2016-05-31 116 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 
相关问题