0

我正在尝试制作一个非常简单的统计脚本。

我有一张桌子data ( ip, date, page )。仅当自最后 15 分钟以来没有相同的 ip 和页面时,我才想将 ip 和当前页面插入此表。

这是我尝试的最后一个 SQL:

INSERT INTO data ( `ip` , `date` , `page` )
SELECT ( :ip , NULL , :page )
WHERE NOT EXISTS (
    SELECT * FROM data
    WHERE `ip` = :ip AND `page` = :page AND date BETWEEN timestamp(DATE_SUB(NOW(), INTERVAL 15 MINUTE)) AND timestamp(NOW())
)

“不存在”中的 SELECT 单独使用时有效。任何帮助表示赞赏!

4

2 回答 2

0

由于这个问题,我设法让它工作:PHP PDO INSERT WHERE NOT EXISTS statement not working

这是工作 SQL:

INSERT INTO data (ip, date, page)
SELECT * FROM (SELECT :ip , NULL, :page ) as tmp
WHERE NOT EXISTS (
    SELECT ip
    FROM data
    WHERE ip = :ip
        AND page = :page
        AND date >= DATE_SUB(NOW(), INTERVAL 15 MINUTE)
    LIMIT 1
)

问题是,我不确定了解它的所有内容,我不喜欢这样,所以我会尝试找到更多信息!

于 2013-10-24T12:24:07.813 回答
-1

“不存在的地方”无效

您必须执行 2 个 sql 查询:

$sql = 'SELECT * FROM data
    WHERE `ip` = :ip AND `page` = :page AND date BETWEEN timestamp(DATE_SUB(NOW(), INTERVAL 15 MINUTE)) AND timestamp(NOW())';
$sth = $pdo->prepare($sql);
$sth->execute(array(':ip' => 'that ip', ':page' => 'that page'));
if ($sth->rowCount() === 0)
{
   $sql = 'INSERT INTO data ( `ip` , `date` , `page` )
VALUES (:ip , NULL , :page)';
   // etc.
 }
于 2013-10-24T10:19:53.837 回答