查找 URL 访问过 SQL A 和 B 的用户?

Find users who have visited URL A and B with SQL?

假设您有一个 table 和 user, url, datetime,其中每一行都是一次网站访问。

如何找到既访问过 URL 包含字符串模式 A 又访问过 URL 包含字符串模式 B 的用户?

事实上它“包含一个字符串模式......”,而不是简单的相等性使得无法使用类似

的查询
url in ('action1.php', 'action2.php')

喜欢 .

您可以使用 group byhaving:

select user
from t
where url like '%a%' or
      url like '%b%'
group by user
having sum(url like '%a%') > 0 and
       sum(url like '%b%') > 0;

如果不想重复比较,可以省略where子句或使用:

select user
from (select t.*, (url like '%a%') as has_a, (url like '%n%') as has_b
      from t
     ) t
where has_a or has_b
group by user
having sum(has_a) > 0 and
       sum(has_b) > 0;

假设“/testing”和“/staging”是两个 URL 模式。你可以使用这个

SELECT   user
FROM     `table`
WHERE    url LIKE '%/testing%' or
         url LIKE '%/staging%'
GROUP BY user
HAVING   (COUNT(url LIKE '%/testing%') > 0 and COUNT(url LIKE '%/staging%') > 0)

如果您需要有关模式匹配的更多信息,您可以搜索“模式匹配 SQL”和“SQL 正则表达式”。