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