Therronis
12.05.2004, 03:09:05
witam
mam taka tabele
id - kluczyk ; )
ip_ - zakres od ktorego dane pastwo posiada ip
_ip - zakres do ktorego dane panstwo posiada ip
symbol - symbol panstwa
name - nazwa panstwa
w tym problem ze nie wiem jak zapytac mysql o wynik, kiedy mam ip np 221.12.14.13, ktory znajduje sie w wierszu powiedzmy id = 35 i jest w zakresie ip_ = "221.0.0.0", _ip = "221.12.191.255".
chce znajac tylko ip uzyskac id wiersza majacego potrzebne mi dane (chodzi o kraj) uzywajac ip_ i _ip... nie wiem jak, prosze o pomoc, jakakolwiek podpowiedz lub rozwiazanie mojego problemu.
Ludvik
12.05.2004, 08:38:15
Hmmm...nie wiem jak to jest z pulami ip, ale skoro pierwsze 8 bitów będzie tylko się różniło w bazie, to możesz zapisać tylko je. czyli wpis do bazy - pole typu int i zapisujesz np. 221 - tak jak w przykładzie. Potem podany adres ip tylko rozkładasz na kawałki funkcją explode i porównujesz pierwszą część do wpisu w bazie. Wybierasz dane zapytaniem i tyle

Mam nadzieję, że dobrze cię zrozumiałem.
switch
12.05.2004, 14:30:39
Jeżeli dla każdego kraju masz inny numer IP to go w ten sposób przypisz w bazie. Wtedy zadasz pytanie:
[sql:1:4c7098e4a4] ("SELECT kraj FROM tabela WHERE id='$wartosc_szukana'");[/sql:1:4c7098e4a4]
Albo :
[sql:1:4c7098e4a4]("SELECT kraj FROM tabela WHERE ip ='$szukana_wartosc' ");[/sql:1:4c7098e4a4]
Jeżeli zależności będziesz miał więcej to je dodaj do pytania stosując AND i zadając kolejną zależność.
Jojo
12.05.2004, 14:42:24
Możesz skorzystać z funkcji MySQL'a INET_ATON(). Przelicza ona adres IP na liczbę. Zapytanie mogłoby wyglądać tak:
[sql:1:b11d0bc052]SELECT symbol, name FROM tabela WHERE INET_ATON(ip_) <= INET_ATON( $ip ) AND INET_ATON(_ip) >= INET_ATON( $ip )[/sql:1:b11d0bc052]
(nie dam głowy, że od razu zadziała, bo pisałem to z głowy)
BzikOS
12.05.2004, 14:45:12
php => Bazy danych
Therronis
13.05.2004, 21:55:22
dzieki, zadzialalo : )
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.