Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL-如果记录不存在,则更新表';不存在于另一个表中_Php_Mysql - Fatal编程技术网

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