Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wykorzystanie funkcji PHP w zapytaniu
Forum PHP.pl > Forum > Bazy danych > MySQL
bartek124
Witam.

W tabeli geoip mam zapisane przedziały adresów IP zakodowane przez funkcję ip2long();

Teraz podczas identyfikacji mam mały problem, ponieważ gdy chcę zidentyfikować adres IP w postaci XX.XX.XX.XX, nie dam rady, ponieważ wcześniej muszę go przekonwertować do postaci ip2long.

Moje zapytanie wygląda tak:
  1. SELECT u.*, gi.ip_country FROM users u
  2. LEFT JOIN geoip gi ON gi.ip_start<=u.user_ip AND gi.ip_end>=u.user_ip
  3. ORDER BY u.user_id DESC;


Tutaj:
Kod
gi.ip_start<=u.user_ip AND gi.ip_end>=u.user_ip


potrzebuję zastosować ip2long
Kod
gi.ip_start<=ip2long(u.user_ip) AND gi.ip_end>=ip2long(u.user_ip)


Jednak w żadnych kombinacjach (z ", ' itp) nie działa.
Jest w ogóle możliwe takie zastosowanie?
Kihol
Nie możesz stosować funkcji php w zapytaniu sqlowym na danych sqlowych.
Jeśli chcesz porównywać dane w bazie, to albo muszą być tego samego typu, albo musi istnieć w sql funkcja konwertująca jeden typ w drugi!

Może lepiej rozdzielić to na 2 zapytania? W pierwszym wyciągnąć listę userów i zamienić sobie w php user_ip na long. Później porównywać już odpowiednią zmienną.
kitol
sprawdź mysqlową funkcję INET_ATON(expr) Given the dotted-quad representation of a network address as a string, returns an integer that represents the numeric value of the address. Addresses may be 4- or 8-byte addresses.



Chyba działa dokładnie jak ip2long.
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.