Php MySQL-如果记录不存在,则更新表';不存在于另一个表中
因此,我正在为我的程序编写一个多重查询,检查用户是否查看了某个页面。如果他们没有查看,则在名为Php MySQL-如果记录不存在,则更新表';不存在于另一个表中,php,mysql,Php,Mysql,因此,我正在为我的程序编写一个多重查询,检查用户是否查看了某个页面。如果他们没有查看,则在名为视图的表中创建一条记录,然后在名为页面的表中更新名为numViews的记录,而如果他们已经查看过,则不会发生任何事情 我编写了将记录插入到视图的代码,这将保持所有记录的唯一性。我面临的问题是更新页面中的记录时 以下是我希望达到的目标: if (record_exits_in_table_named_views == false) { UPDATE record IN pages INSE
视图
的表中创建一条记录,然后在名为页面
的表中更新名为numViews
的记录,而如果他们已经查看过,则不会发生任何事情
我编写了将记录插入到视图
的代码,这将保持所有记录的唯一性。我面临的问题是更新页面中的记录时
以下是我希望达到的目标:
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;
感谢所有的帮助。
如果我理解正确的话,感谢更新。应该是这个(不在条款中)
在更新中使用类似的左连接
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
您可以让数据库来处理它:为视图表创建一个after-insert触发器,它将更新pages表,或者在需要时从视图中的条目计算值,因此您根本不需要页面中的值(使用触发器实际上只是一种优化,以加快速度)。工作非常完美。谢谢
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