php - 如何将这两个 MySQL 选择查询合并为一个以防止循环?

标签 php mysql pdo

我正在将所有旧的 mysql 函数重写为准备好的语句 (PDO)。我还尝试重写循环内的所有 sql,使查询“智能”,因此不再需要 sql 循环。但是这个,我不知道如何完成。

用于搜索已用 ip 地址的简单 SQL:

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,在这种情况下,它也是一个“自连接”:

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 子句并在您的应用程序中循环处理结果而不是循环查询。

关于php - 如何将这两个 MySQL 选择查询合并为一个以防止循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28350289/

相关文章:

php - Magento - 半分页

php - 在 php 中维护页面之间的 session ?

php - 查询错误得不到数字

mysql - 如何从mysql获取特定表的索引值?

php - 在 div 或自定义位置显示查询?

php - 如何按照 Apigility 方式验证嵌套数据?

php - Zend 框架 2 'quote_identifiers' => false

CakePHP 2 无法正确处理二进制字段

php - 如何使用 php 在数组中的两个键之间插入一个值?

php - 如果记录不存在则插入,否则使用长查询在mysql中删除