查询在特定时间后插入行

时间:2011-05-04 02:22:47

标签: mysql sql insert

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

它有一个命中表:

id            int
product_id    int
hit_time      datetime
session_id    varchar

现在,当有人观看某个产品时,我会记录下来。

我需要一个查询,只有当hit_time相差30分钟时才应插入记录(对于相同的product_id和session_id)

例如:

首次录制时

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

现在,如果访问者具有相同的session_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个查询,首先从表中选择最大时间,然后插入

任何帮助?

1 个答案:

答案 0 :(得分:1)

你在找这样的东西吗?

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。

NOT EXISTS部分处理尚未记录(product_id,session_id)的情况,第二部分负责处理(product_id,session_id)但存在时间超过30的情况几分钟前。当然,LIMIT 1 in case(product_id,session_id)存在且超过30分钟前出现多次。