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