如何将这 2 MySQL select 查询合并为一个以防止循环?
How to combine these 2 MySQL select queries to one to prevent looping?
我正在将所有旧的 mysql 函数重写为准备好的语句 (PDO)。我还尝试重写所有 sql 内部循环,进行查询 "smart",因此不再需要 sql-循环。但是这个,我不知道如何完成这个。
简单SQL搜索使用过的IP地址:
SELECT ip FROM log_ip WHERE spelerID = :spelerID
通常我会在结果上做一个 while 循环:对于每个找到的 IP 地址,我都会做一个新的 sql 搜索以查找同一 IP 地址上的其他用户。
SELECT spelerID,naam FROM log_ip WHERE ip = :ip
我找不到使用相同 IP 地址创建 1 个查询来查找用户的解决方案?
在此先感谢您的帮助!
您可以使用 LEFT OUTER JOIN
,在这种情况下,它也是 "self join":
SELECT l1.ip, l2.spelerID, l2.naam
FROM log_ip l1
LEFT OUTER JOIN log_ip l2
ON l2.ip = l1.ip
AND l2.spelerID <> l1.spelerID
WHERE l1.spelerID = :spelerID
现在请注意,结果看起来与您可能习惯的略有不同。 l1 ip
值将重复。
您应该研究 JOIN
子句并在您的应用程序中循环处理结果而不是循环查询。
我正在将所有旧的 mysql 函数重写为准备好的语句 (PDO)。我还尝试重写所有 sql 内部循环,进行查询 "smart",因此不再需要 sql-循环。但是这个,我不知道如何完成这个。
简单SQL搜索使用过的IP地址:
SELECT ip FROM log_ip WHERE spelerID = :spelerID
通常我会在结果上做一个 while 循环:对于每个找到的 IP 地址,我都会做一个新的 sql 搜索以查找同一 IP 地址上的其他用户。
SELECT spelerID,naam FROM log_ip WHERE ip = :ip
我找不到使用相同 IP 地址创建 1 个查询来查找用户的解决方案? 在此先感谢您的帮助!
您可以使用 LEFT OUTER JOIN
,在这种情况下,它也是 "self join":
SELECT l1.ip, l2.spelerID, l2.naam
FROM log_ip l1
LEFT OUTER JOIN log_ip l2
ON l2.ip = l1.ip
AND l2.spelerID <> l1.spelerID
WHERE l1.spelerID = :spelerID
现在请注意,结果看起来与您可能习惯的略有不同。 l1 ip
值将重复。
您应该研究 JOIN
子句并在您的应用程序中循环处理结果而不是循环查询。