在第一个时间戳和第一个和第二个之间的差异之间获取所有行 - MySQL

时间:2017-10-09 23:45:54

标签: mysql sql

我要求在两次登录用户之间获取所有记录。

当我们检索第一次登录的行并获得第一个时间戳(t1)时,我们希望获得用户在此时间戳和第二个时间戳(t2)之间所做的所有点击。

我正在做的是:获取第一个时间戳(t1)并用用户的第二个时间戳(t2)减去它。然后我将区别(t2-t1)与第一个时间戳相加并运行查询以获得t1和(t1 + d)之间的所有命中。

因此我有两件事要做:(获得第二个时间戳和差异)

first timestamp (t1) is: 1507559316

            SELECT
              id, timestamp, (timestamp - 1507559316) as Difference
            FROM
              login_activity l 
            WHERE 
                l.uid=445 AND timestamp > 1507559316
            ORDER BY
                timestamp
                LIMIT 1

获取第一个时间戳和差异

之间的所有行

t1 = 1507559316 difference = 1226

          SELECT
              name, address, time
            FROM
              records r 
            WHERE 
                time BETWEEN FROM_UNIXTIME(1507559316) AND FROM_UNIXTIME(1507559316 + 1226)
            ORDER BY
                time

你认为这是解决这个问题的正确方法吗?

1 个答案:

答案 0 :(得分:1)

除非我认真地误解了某些内容,否则你的方法会不必要地复杂化。您似乎有AB,然后通过B重新计算A + (B - A)。这很神秘。

假设您的第一个时间戳位于t1,您可以将第一个查询简化为

SELECT
  id, timestamp AS t2
FROM
  login_activity l 
WHERE 
  l.uid=445 AND t2 > t1
ORDER BY
  timestamp
LIMIT 1

和你的第二个查询

SELECT
  name, address, time
FROM
  records r 
WHERE 
  time BETWEEN FROM_UNIXTIME(t1) AND FROM_UNIXTIME(t2)
ORDER BY
  time

无需将t2重新计算为t1 + (t2 - t1),因此无需首先计算差异。