gpt4 book ai didi

php - 执行此递归多对多数据库查找的最优雅方法是什么?

转载 作者:行者123 更新时间:2023-11-29 03:38:26 26 4
gpt4 key购买 nike

我有一个 MySQL 表,其中包含关于用户的多对多数据:

username (PK)     ip (PK)          machine_id (PK)
--------------------------------------------------
tester1 1.2.3.4 ABC
tester1 6.6.6.6 BBB
tester2 1.2.3.4 ZZZ
tester3 2.3.4.5 ABC
tester4 2.3.4.5 OOO
tester5 1.2.3.4 XYZ
tester5 8.9.7.6 BBB
tester5 1.2.3.4 OOO
tester6 9.9.9.9 ZZZ

它使用组合主键将行限制为所有三列的唯一组合。

如您所见,同一个用户可以使用多个IP地址和多台机器的组合来访问系统。就我而言,如果用户具有相同的 IP 或机器 ID,则他们是同一用户。

我想要一种方法来找到数据之间所有可能的联系,以便我可以识别某人使用的用户名/IP/ID 的每个可能组合。

示例

如果我想找出 tester1 使用的别名,很简单:SELECT * FROM users WHERE username LIKE '%tester1%' 这会给我:

tester1      1.2.3.4     ABC
tester1 6.6.6.6 BBB

然后我可以将 IP 1.2.3.4 和 6.6.6.6 连接到该用户,如果我查找这两个 IP,我可以看到它们使用了一些其他名称和机器 ID:

tester2      1.2.3.4     ZZZ
tester5 1.2.3.4 XYZ
tester5 1.2.3.4 OOO
tester1 6.6.6.6 BBB

然后我继续查找用户的所有机器 ID,这为我们提供了他的另一个别名(来自机器 ID OOO):

tester4      2.3.4.5     OOO

查找 OOO 我找到了另一个 IP,2.3.4.5,这给了我另一个连接:

tester3      2.3.4.5     ABC

因为我们之前查过机器IDABC,所以没必要再查。

我现在已经确定了该用户所有可能的别名,并且拥有他使用过的 IP、机器 ID 和用户名的完整列表。所有这些都来自递归查找数据,然后对结果进行另一个递归查找,依此类推。

我的问题是,如何将此逻辑转换为 PHP/SQL?

有没有一种方法可以通过查询直接提取所有“连接的”数据,或者是否需要一些 PHP 处理,如果需要,是什么?

最佳答案

基本上,您可以在机器 ID 列上使用选择查询和 2 个自连接。例如:

      select * from users left join users u1 on users. mid=u1.mid  left join users u2 on u1. mid=u2. mid where  name like "%tester1%"

关于php - 执行此递归多对多数据库查找的最优雅方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17954839/

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