SSimonGMedlem sedan maj 2000444 inlägg Hej,
Jag har en tabell som innehåller ipnummer och vilket land dom tillhör och får ut rätt land och landskod med;
SELECT cc AS Country_code, cn AS Country_name
FROM geo_cc
NATURAL JOIN geo_ip
WHERE inet_aton( "200.139.130.244" )
BETWEEN START AND END LIMIT 0 , 30
vilket ger:
Country_code Country_name
BR Brazil
hur skall en korrekt join se ut om jag vill ta ut landet från ytterligare en tabell som har ett fältnamn "server_ip" för att lista tex dom 30 länder som förekommer mest i server_ip? (top 30 länder som besöker en sida i mitt fall)
ipt lagras i xxx.xxx.xxx.xxx formatet.
geo_ip ser ut så här:
start end ci
33996344 33996351 1
50331648 67277055 2
67277056 67277119 3
67277120 67283519 2
67283520 67283583 3
.....
geo_c ser ut så här:
ci cc cn
1 GB United Kingdom
2 US United States
3 CA Canada
4 MX Mexico
5 BM Bermuda
....
Databasen är mysql.
Simon
LLarsGMedlem sedan dec. 200012 464 inlägg SELECT cn AS Country_name,count(*) as freq
FROM geo_cc
inner JOIN geo_ip on geo_cc.ci = geo_ip.ci
inner join annantabell
on inet_aton(server_ip) between start AND end
order by freq desc
LIMIT 0 , 30
SSimonGMedlem sedan maj 2000444 inlägg
LarsG skrev:
SELECT cn AS Country_name,count(*) as freq
FROM geo_cc
inner JOIN geo_ip on geo_cc.ci = geo_ip.ci
inner join annantabell
on inet_aton(server_ip) between start AND end
order by freq desc
LIMIT 0 , 30
Den kräver en group by och gruperar jag tex på tex country_name eller geo_cc.ci så tar den väääldigt lång tid. Jag dödade processen efter 40 sekunder.
LLarsGMedlem sedan dec. 200012 464 inlägg Jo, jag glömde group by och den skall vara på country_name.
Vad säger explain? Har du index på start/end?
SSimonGMedlem sedan maj 2000444 inlägg
LarsG skrev:
Jo, jag glömde group by och den skall vara på country_name.
Vad säger explain? Har du index på start/end?
Explain säger:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE geo_cc ALL PRIMARY NULL NULL NULL 232 Using temporary; Using filesort
1 SIMPLE geo_ip ref ci ci 1 usury_usury.geo_cc.ci 315 Using where
1 SIMPLE usury_hits ALL NULL NULL NULL NULL 4604 Using where
Det var inga index, men satte dom nu men är osäker på hur jag bekfräftar att dom är satta.
Men via phpmyadmin får jag fram följande:
Indexes: Documentation
Keyname Type Cardinality Action Field
start INDEX 73158 Edit Drop start
end INDEX 73158 Edit Drop end
ci INDEX 232 Edit Drop ci
/simon
SSimonGMedlem sedan maj 2000444 inlägg Ingenannan som sitter inne med svatet på varför det kan ta så passlång tid att exekvera frågan?
Simon
SSimonGMedlem sedan maj 2000444 inlägg Har försökt hitta några andra lösningar utan resultat.
igen, ingen som kan tänkas ha någon lösning, all hjälp skulle uppskattas.
Simon