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

时间:2013-08-06 22:46:27

标签: mysql

我正在尝试构建一个查询,该查询将采用player_id,查找为该人员记录的所有不同ip地址,并提取其他不同的player_id个共享列表每个ip。

示例模式:

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,一个player表记录了每个唯一的播放器(对此不重要),并且每次连接时都会记录连接表。

使用两个查询执行此操作是我的第一个想法,这是有效且快速的 - 但我真的想用单个查询来完成这项工作。我尝试了一个使用子查询的查询,但这需要永远完成。

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

1 个答案:

答案 0 :(得分: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