gpt4 book ai didi

mysql - 选择性查询

转载 作者:太空宇宙 更新时间:2023-11-03 11:56:39 24 4
gpt4 key购买 nike

我保留了一个网站访问数据库(原始 ip、refrer 和登录页面),因此我可以对访问者进行一些分析,以及哪些页面更有趣并且需要改进(除其他外)

现在我对一些访问者 IP 不太感兴趣 - 比如我已经确定的谷歌或微软的机器人,或者我公司自己的 IP(我们有用于托管和邮件服务器的静态 IP),所以我有一个表来保存这些 IP。

我有查询来按页面和按日期范围获取访问数据,但是,我需要显示所有 IP 的完整访问历史记录,除了我排除的 IP 表中的那些 - 对于那些我只想要第一次访问的 IP每一天

编辑: 根据请求,这是我需要的示例:这是一个包含表格/数据的示例(也在 sqlfiddler 上)

create table access (
id int(11),
accessDate datetime,
ip varchar(15),
referer varchar(150),
landPage varchar(150)
);
create table removed (
ip varchar(15)
);
insert into access (id, accessDate, ip, referer, landPage) values (1, '2015-08-25 12:22:24', '123.123.123.123', 'www.google.com', 'www.mydomain.com');
insert into access (id, accessDate, ip, referer, landPage) values (2, '2015-08-25 12:25:24', '123.123.123.123', 'www.mydomain.com', 'www.mydomain.com/sub1');
insert into access (id, accessDate, ip, referer, landPage) values (3, '2015-08-25 13:22:24', '103.123.123.123', 'www.google.com', 'www.mydomain.com');
insert into access (id, accessDate, ip, referer, landPage) values (4, '2015-08-25 13:23:24', '103.123.123.123', 'www.mydomain.com', 'www.mydomain.com/sub1');
insert into access (id, accessDate, ip, referer, landPage) values (5, '2015-08-26 12:22:24', '123.123.123.123', 'www.google.com', 'www.mydomain.com');
insert into removed (ip) values ('123.123.123.123');

我需要一个返回如下内容的查询:

1 2015-08-25 12:22:24 123.123.123.123 www.google.com www.mydomain.com
3 2015-08-25 13:22:24 103.123.123.123 www.google.com www.mydomain.com
4 2015-08-25 13:23:24 103.123.123.123 www.mydomain.com www.mydomain.com/sub1
5 2015-08-26 12:22:24 123.123.123.123 www.google.com www.mydomain.com

基本上,它会显示 IP 103.123.123.123 的所有条目,因为它不在 removed 表中,同时仅显示 IP 123.123.123.123 的第一个条目,因为它在表中已删除.

这可能吗?

最佳答案

除了 Strawberry 之前的回答之外,还有一个可行的技巧,前提是您真的不关心为删除的 IP 返回的行。

SELECT access.*
FROM access
LEFT JOIN removed ON removed.ip = access.ip
GROUP BY DATE(accessDate), IF(removed.ip IS NULL,access.id,removed.ip);

返回:

+------+---------------------+-----------------+------------------+-----------------------+
| id | accessDate | ip | referer | landPage |
+------+---------------------+-----------------+------------------+-----------------------+
| 1 | 2015-08-25 12:22:24 | 123.123.123.123 | www.google.com | www.mydomain.com |
| 3 | 2015-08-25 13:22:24 | 103.123.123.123 | www.google.com | www.mydomain.com |
| 4 | 2015-08-25 13:23:24 | 103.123.123.123 | www.mydomain.com | www.mydomain.com/sub1 |
| 5 | 2015-08-26 12:22:24 | 123.123.123.123 | www.google.com | www.mydomain.com |
+------+---------------------+-----------------+------------------+-----------------------+

说明:首先,行按日期分组(这部分很明显)。然后,删除了 ip 的行按 ip 分组(每行只保留一行),而其他行保持不变(按唯一字段分组 = 没有分组发生)。

同样,如果不关心为删除的 ip 返回的行,这只是一个有用的技巧。

关于mysql - 选择性查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32201535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com