2013-08-06 24 views
0

我試圖建立一個查詢,將採取player_id,發現記錄的那個人所有不同ip地址,拉鮮明其他player_id s表示股票名單每個ip。查找一個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我看到,一個球員表記錄每一個獨特的球員(這並不重要),並且加入每次連接時表記錄。

這樣做與兩個查詢是我的第一個想法,並且工作,並且很快 - 但我真的想使這個工作與一個單一的查詢。我嘗試了一個使用子查詢的查詢,但這需要永久完成。

什麼是最有效的查詢方法?

回答

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 
+0

這很好。我的子查詢花費了大約2 1/2秒(在將索引添加到ip_id/player_id列之前最多兩分鐘),但這花了1.81秒。這當然更好,並且在我感覺我可以合作的範圍內。我會看看我還能做些什麼來加速它。謝謝 – helion3

相關問題