我正在尝试制作一个非常简单的统计脚本。
我有一张桌子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有效。 任何帮助表示赞赏!
答案 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.
}