如果不存在PHP PDO插入最后15分钟

时间:2013-10-24 09:56:28

标签: php mysql sql pdo

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

我有一张桌子data ( ip, date, page )。 我想将ip和当前页面插入此表,只有在过去15分钟内没有相同的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有效。 任何帮助表示赞赏!

2 个答案:

答案 0 :(得分: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
)

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

答案 1 :(得分:-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.
 }