Mysql 查询以在特定时间后插入行

Mysql 查询以在特定时间后插入行,mysql,sql,insert,Mysql,Sql,Insert,我正在开发定制购物车应用程序 它有一个点击表: id int product_id int hit_time datetime session_id varchar 现在,当有人查看一个产品时,我会记录一个点击率 我需要一个这样的查询:只有当相同产品id和会话id的命中时间相差30分钟时,才应该插入记录 例如: 当录制第一首歌曲时 id product_id hit_time

我正在开发定制购物车应用程序

它有一个点击表:

id            int
product_id    int
hit_time      datetime
session_id    varchar
现在,当有人查看一个产品时,我会记录一个点击率

我需要一个这样的查询:只有当相同产品id和会话id的命中时间相差30分钟时,才应该插入记录

例如:

当录制第一首歌曲时

id             product_id             hit_time                session_id
------------------------------------------------------------------------
1                  1                  2011-01-01 06:30:00      abcxyzmno
2                  5                  2011-01-01 06:32:00      abcxyzmno
现在,如果具有相同会话id的访问者在30分钟内访问product_id=1的产品页面,则不应插入数据

所以不应插入下面的行,因为只有5分钟的差异

3                  1                  2011-01-01 06:35:00      abcxyzmno
但如果访客在30分钟后访问同一产品,则应进行记录

3                  1                  2011-01-01 07:01:15      abcxyzmno
我想要单插入查询

我不需要2个查询,首先从表中选择MaxTime,然后插入它


有什么帮助吗?

你在找这样的东西吗

INSERT INTO hits (product_id, hit_time, session_id)
SELECT $product_id, current_timestamp, $session_id
FROM hits
WHERE NOT EXISTS (
        SELECT id
        FROM hits
        WHERE product_id = $product_id 
          AND session_id = $session_id
   )
   OR (
            product_id = $product_id
        AND session_id = $session_id
        AND hit_time   < current_timestamp - 30*60
   )
LIMIT 1
其中,$product_id和$session_id是产品和会话id

“不存在”部分负责处理尚未记录产品标识、会话标识的情况,第二部分负责处理产品标识、会话标识存在但已超过30分钟的情况。当然,如果product_id,session_id在30分钟前出现并多次出现,则限制为1