ThACRoWMedlem sedan dec. 2001314 inlägg Jag har en logger som samlar in alla besökares ip-adresser. Sedan har jag en databas med numeriska ip-adresser samt landskod. Mitt syfte är att kunna få reda på vilket land alla ip-adresser är ifrån.
Jag har provat att använda alias som man definierar med "AS" i WHERE, men det gick inget bra. Fick följande felmeddelande: "Unknown column 'numeric_ip' in 'where clause'"
SELECT INET_ATON(logger.ip)
AS numeric_ip, logger.ip, countries.country_code
FROM logger, countries
WHERE countries.ip_from <= numeric_ip
and countries.ip_to >= numeric_ip
GROUP BY logger.ip
Jag provade att lägga in INET_ATON(logger.ip) efter WHILE, men det dröjde nästan 1 minut innan den var klar... då den ska kalkylera om ip-adresserna för varje fält...
Se här för mer info:
http://ip-to-country.directi.com/node/view/54
LarsGMedlem sedan dec. 200012 464 inlägg Det går inte att använda alias i where. Hur skulle det gå till?
Värdena i select-listan finns ju inte innan frågan är utförd.
Vad har du för index på tabellen?
ThACRoWMedlem sedan dec. 2001314 inlägg Okej. Jag ger dig mina tabeller och så hoppas jag på att du klurar ut det åt mig :)
[b]logger[/b]
timestamp varchar(14)
ip varchar(15)
page varchar(50)
+----------------+-----------------+----------------+
| timestamp | ip | page |
+----------------+-----------------+----------------+
| 20030719150243 | XXX.XXX.XXX.XXX | /about.php |
| 20030719150048 | XXX.XXX.XXX.XXX | /guestbook.php |
| 20030719150048 | XXX.XXX.XXX.XXX | /guestbook.php |
| 20030719150009 | XXX.XXX.XXX.XXX | /guestbook.php |
| 20030719145924 | XXX.XXX.XXX.XXX | /about.php |
| 20030719145755 | XXX.XXX.XXX.XXX | /members.php |
| 20030719145641 | YYY.YYY.YYY.YYY | /members.php |
| 20030719145635 | YYY.YYY.YYY.YYY | /members.php |
| 20030719145611 | YYY.YYY.YYY.YYY | /members.php |
| 20030719145549 | YYY.YYY.YYY.YYY | /members.php |
+----------------+-----------------+----------------+
...
[b]countries[/b]
ip_from double
ip_to double
country_code char(2)
+-----------+-----------+--------------+
| ip_from | ip_to | country_code |
+-----------+-----------+--------------+
| 0 | 16777215 | US |
| 50331648 | 83886079 | US |
| 100663296 | 385875967 | US |
| 404226048 | 404750335 | US |
| 404815872 | 404877311 | US |
+-----------+-----------+--------------+
...
Fälten ip_from och ip_to i tabellen countries är ip-adresser i numerisk form. För att få reda på vilket land en given ip-adress är ifrån gör man följande:
SELECT country_code FROM countries WHERE ip_from <= INET_ATON('127.0.0.1') AND ip_to >= INET_ATON('127.0.0.1')
Hur ska jag nu formulera min sql-fråga så att jag får ett resultat innehållande ip och country_code för varje rad i tabellen logger?
ThACRoWMedlem sedan dec. 2001314 inlägg ...eller så får jag helt enkelt spara numeriska värdet på ip-adressen i tabellen logger. Blir kanske enklast och snabbast på det viset.