Mysql 通过ip在单个查询中查找所有不同的备用用户名

Mysql 通过ip在单个查询中查找所有不同的备用用户名,mysql,Mysql,我正在尝试构建一个查询,该查询将获取一个player\u id,查找为此人记录的所有不同的ip地址,并提取共享每个ip的不同的其他player\u id的列表 模式示例: CREATE TABLE IF NOT EXISTS `ips` ( `ip_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `ip` int(10) unsigned NOT NULL, PRIMARY KEY (`ip_id`) ); CREATE TABLE I

我正在尝试构建一个查询,该查询将获取一个
player\u id
,查找为此人记录的所有不同的
ip
地址,并提取共享每个ip的不同的其他
player\u id
的列表

模式示例:

CREATE TABLE IF NOT EXISTS `ips` (
  `ip_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `ip` int(10) unsigned NOT NULL,
  PRIMARY KEY (`ip_id`)
);


CREATE TABLE IF NOT EXISTS `joins` (
  `join_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `player_id` int(10) unsigned NOT NULL,
  `ip_id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`join_id`)
);
ips表记录我看到的每个唯一的ip,players表记录每个唯一的播放器(这并不重要),joins表记录每次连接的情况

用两个查询完成这项工作是我的第一个想法,这很有效,而且速度很快——但我真的希望用一个查询完成这项工作。我尝试了一个使用子查询的查询,但它需要很长时间才能完成


查询此信息最有效的方法是什么?

这对您来说是如何工作的


这很有效。我的子查询大约需要2 1/2秒(在我将索引添加到ip_id/player_id列之前最多需要2分钟),但这需要1.81秒。这当然更好,而且在我觉得可以接受的范围内。我看看还能做些什么来加快速度。谢谢
SELECT DISTINCT
  joins2.player_id,
  ips.ip


FROM joins

JOIN ips
  ON ips.ip_id          = joins.ip_id

JOIN joins             AS joins2
  ON joins2.ip_id       = ips.ip_id
 AND joins2.player_id  != #player_id


WHERE joins.player_id   = #player_id