不确定如何最好地说出来,所以请耐心等待。我的表(简化)如下:
id
- 整数 - 自动增量user_id
- 整数timestamp
- 日期时间我需要的是能够查询此表并选择timestamp
列在每个user_id
的预定义时间范围内(可能是任意的,但可以说是10分钟)的所有记录。所以例如,我想知道在“2011-01-29 03:00:00”是否有假设user_id
5的条目,然后在“2011-01-29 03:02:00” “但是,如果用户在”2011-01-29 03:00:00“搜索一次,然后在”2011-01-29 05:00:00“搜索一次。这还需要捕获用户搜索超过2次的实例,每次都在前一个时间范围内。
对于背景,这是一个网站搜索表,我想知道用户搜索某些内容的所有实例,然后再次搜索(可能是因为他们之前的搜索没有提供他们正在寻找的结果)。
我知道这可能比我想做的更简单,但我似乎无法弄明白。如果需要,我可以澄清或提供其他信息。谢谢!
修改 我对表中所有用户的搜索返回结果感兴趣,不仅仅是用户#5,而且还可以在不输入实际时间的情况下进行搜索。时间戳不应该是手动输入的内容,而是应该找到每个用户在10分钟内完成的行。
答案 0 :(得分:1)
这应该在时间限制内为您提供所有用户和他们的搜索次数:
SELECT user_id, COUNT(*) AS cnt FROM table
WHERE timestamp BETWEEN "2011-01-29 03:00:00" AND "2011-01-29 03:02:00"
GROUP BY user_id
ORDER BY user_id
这将显示仅由user_id #5
进行的搜索次数:
SELECT COUNT(*) AS cnt FROM table
WHERE user_id=5
AND timestamp BETWEEN "2011-01-29 03:00:00" AND "2011-01-29 03:02:00"
根据实际数据库的不同,语法可能会略有不同,尤其是传递给BETWEEN
条件的日期格式。
答案 1 :(得分:1)
SELECT distinct t1.user_id, t1.another_field, t1.another_field
FROM
table t1,
table t2
WHERE
t1.user_id = t2.user_id
AND abs(timestampdiff(MINUTE, t1.timestamp, t2.timestamp)) < 10
如果您想进一步限制结果,可以添加
AND t1.user_id = any_number (or IN or between, etc)
限制日期范围添加,
AND t1.timestamp BETWEEN A and B (or > or <)