gpt4 book ai didi

php - Mysql 限制选择不共享列的行

转载 作者:行者123 更新时间:2023-11-29 12:23:22 25 4
gpt4 key购买 nike

使用 PHP MySQL,我将用户的 IP 和他们输入的网站的 IP 存储在数据库中。这些行看起来像:

ip              entrypoint
xxx.xxx.xxx.1 /index.php?source=google
xxx.xxx.xxx.5 /other.php?source=bing
xxx.xxx.xxx.5 /other.php?source=yahoo
xxx.xxx.xxx.4 /more.php

我正在尝试进行一个查询,该查询从表单中获取最多 300 个 IP,并搜索用户来自哪里,因此我从这里开始(缩短为仅显示 4 个):

SELECT entrypoint,ip from TABLE WHERE ip IN('xxx.xxx.xxx.1','xxx.xxx.xxx.5','xxx.xxx.xxx.5','xxx.xxx.xxx.4') AND entrypoint LIKE '%source=%';

这给了我这样的结果:

ip              entrypoint
xxx.xxx.xxx.1 /index.php?source=google
xxx.xxx.xxx.5 /other.php?source=bing
xxx.xxx.xxx.5 /other.php?source=yahoo

由于代理、机器人等原因,某些 IP 有 1,000 多个条目,因此我无法使用他们的信息。如果给定 IP 有多个包含“source=”的“入口点”,我想忽略该行。它还使得搜索大量 IP 变得困难,因为如果我搜索其中一个 IP 并返回与其关联的所有行,我将耗尽 PHP 内存。

有没有一种方法可以编写查询,而不是让 PHP 来整理共享 IP 的结果,以便在“” 中存在多个值时,它不会为“ip”返回任何内容入口点”?那就是我希望它返回:

xxx.xxx.xxx.1   /index.php?source=google

如果我使用这 4 个 IP 在上面的 4 行上运行它。由于 xxx.xxx.xxx.5 有两个不同的入口点,我想忽略这些行。

最佳答案

您应该按 ip 对结果进行分组,计算不同入口点的数量,并返回具有 1 个入口点的入口点

 SELECT entrypoint,ip, count(distinct entrypoint) nb
from TABLE WHERE ip
IN('xxx.xxx.xxx.1','xxx.xxx.xxx.5','xxx.xxx.xxx.5','xxx.xxx.xxx.4')
AND entrypoint LIKE '%source=%' group by ip HAVING nb=1;

关于php - Mysql 限制选择不共享列的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28705629/

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