Ich versuche, ein Problem zu lösen, das zwei Spalten in einer Tabelle vergleichen könnte. Die Tabelle ist wie folgt
%Vor% Mein Problem ist, dass ich eine IP von 25.195.32.0
habe und diese mit der Spalte from
und to
vergleichen und die country name
zurückgeben soll.
Sie können INET_ATON
verwenden, um einen numerischen Wert der zu vergleichenden IPs zu erhalten.
Sie können die Bedingung IN()
try verwenden verwenden, indem Sie AND
oder OR
Wie ich aus der Frage interpretiere, können Sie eine Maske verwenden und die Basis-IP-Adresse abrufen und dann vergleichen. Um die Maske zu verwenden und die Basis-IP zu erhalten, müssen Sie etwas über verschiedene Klassen (A, B, C, D) lernen, die von der Adressierung verwendet werden.
Lesen Sie diesen Link Ссылка
INET_ATON
gibt die gewünschte Lösung für IPV4
-Adressen.
Abgesehen davon können Sie auch versuchen, HEX
version der IP zu vergleichen.
Beispiel :
%Vor%Wählen Sie einen Bereich:
%Vor%Wenn Sie ein Skript (zB PHP) verwenden können, können Sie die gesamte Tabelle auswählen und eine Maske für die IP erstellen. Etwas wie:
Wir können wissen, was zu der Netzwerkadresse 192.168.129.3/18 ip gehört folgt:
%Vor%Das Ergebnis lieferte uns dieses Skript ist 192.168.128.0, das ist die Netzwerkadresse, zu der die IP 192.168.129.3/18 gehört.
Dann können Sie ein "SELECT" Ihres Netzwerks mit "von" und "bis" Feldern machen.
Verwandle IP in Ganzzahl, dann Vergleich Ganzzahl ist einfach. MySQL bietet dazu die Funktion inet_aton
an.
Für die Leistung sollten Sie die Spalte from
, to
in Integer Manully umwandeln. z.B. Zu den Spalten from_n
, to_n
hinzufügen. dann wird dein SQL so sein:
Wenn Sie MySQL nicht verwenden, sollten Sie $ip
zuerst in die Ganzzahl $ ip_n transformieren (mit etwas wie Pythons socket.inet_aton
) und dann inet_aton($ip)
durch $ip_n
ersetzen.