0

我正在尝试构建一个查询,该查询将获取 a ,查找为该人记录的player_id所有不同地址,并提取共享每个 ip 的不同 other 的列表。ipplayer_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 表记录每次连接时。

用两个查询来做这件事是我的第一个想法,它行得通而且速度很快——但我真的很想用一个查询来做这个。我尝试了一个使用子查询的查询,但这需要永远完成。

查询此问题的最有效方法是什么?

4

1 回答 1

1

这对你有什么作用?http://sqlfiddle.com/#!2/133c6/1

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
于 2013-08-06T23:00:21.457 回答