Mysql 复杂条件SQL查询

Mysql 复杂条件SQL查询,mysql,Mysql,假设我有下表: | Visitor | url | time | 我正在尝试编写以下查询: for every visitor: check if visitor has visited /my_url if yes: check if visitor visited /my_url/cool url within next 5 min 然后我会有这样的想法: | visitor | url | | xyz | /my_url | |

假设我有下表:

| Visitor | url | time |
我正在尝试编写以下查询:

for every visitor:
  check if visitor has visited /my_url
  if yes:
    check if visitor visited /my_url/cool url within next 5 min
然后我会有这样的想法:

| visitor | url          |
| xyz     | /my_url      |
|         | /my_url/cool |
| abc     | /my_url      |
|         | /my_url/cool |
我甚至不知道从哪里开始。任何帮助都将不胜感激

到目前为止,我所得到的只是:

select url, time, visitor 
from my_table
where url like '%my_url%'
group by visitor;

试着这样做:

select distinct v1.Visitor
from visits v1
join visits v2
  on  v2.Visitor = v1.Visitor
  and v2.time >  v1.time
  and v2.time <= v1.time + interval 5 minute
where v1.url = '/my_url'
  and v2.url = '/my_url/cool'
选择不同的v1.Visitor
来自访问v1
加入访问v2
在v2.Visitor=v1.Visitor上
和v2.time>v1.time

还有v2.time试试这样的方法:

select distinct v1.Visitor
from visits v1
join visits v2
  on  v2.Visitor = v1.Visitor
  and v2.time >  v1.time
  and v2.time <= v1.time + interval 5 minute
where v1.url = '/my_url'
  and v2.url = '/my_url/cool'
选择不同的v1.Visitor
来自访问v1
加入访问v2
在v2.Visitor=v1.Visitor上
和v2.time>v1.time

v2.time不是一个非常复杂的查询

每一位访客

这是否意味着您希望未访问URL的访问者包含在输出中?(我觉得你的描述和例子都不清楚)。假设是这样的话

假设您的表中的记录比唯一访问者多得多,因此,如果您可以连接到访问者表,则解决方案的效率会更高,但如果没有,您可以使用:

SELECT DISTINCT visitor
FROM yourtable
检查访客是否访问过[url1]

检查访客是否在接下来的5分钟内访问了[url2]

但是如果你只是想要一份满足这两个标准的访客名单

SELECT visitor
FROM yourtable u1
JOIN yourtable u2
ON u1.visitor=u2.visitor
AND u2.time between u1.time
            AND u1.time + INTERVAL 5 MINUTES
WHERE u1.url=[url1]
AND u2.url=[url2]

这不是一个非常复杂的查询

每一位访客

这是否意味着您希望未访问URL的访问者包含在输出中?(我觉得你的描述和例子都不清楚)。假设是这样的话

假设您的表中的记录比唯一访问者多得多,因此,如果您可以连接到访问者表,则解决方案的效率会更高,但如果没有,您可以使用:

SELECT DISTINCT visitor
FROM yourtable
检查访客是否访问过[url1]

检查访客是否在接下来的5分钟内访问了[url2]

但是如果你只是想要一份满足这两个标准的访客名单

SELECT visitor
FROM yourtable u1
JOIN yourtable u2
ON u1.visitor=u2.visitor
AND u2.time between u1.time
            AND u1.time + INTERVAL 5 MINUTES
WHERE u1.url=[url1]
AND u2.url=[url2]

为什么在表描述和查询中使用不同的列名?为什么在表描述和查询中使用不同的列名?这是一个很好的解释。非常感谢您,我想我可以基于此编写我的其他查询。:)这是很好的解释。非常感谢您,我想我可以基于此编写我的其他查询。:)