我正在尝试构建一个查询,该查询将采用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表记录了每个唯一的播放器(对此不重要),并且每次连接时都会记录连接表。
使用两个查询执行此操作是我的第一个想法,这是有效且快速的 - 但我真的想用单个查询来完成这项工作。我尝试了一个使用子查询的查询,但这需要永远完成。
查询此问题的最有效方法是什么?
答案 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