beh, se ti serve cercare l'IP a blocchi credo che ti convenga di più convertirlo a numero piuttosto che tenerlo in forma letterale!
www.php.net/ip2long
codice:
$ip = ip2long($_SERVER['REMOTE_ADDR']);
dopo di che, sappiamo che ti interessa prendere 4 blocchi, ovvero se ad esempio ti viene dato, prima vuoi cercare questo 125.152.15.1, poi vuoi cercare gli ip compresi tra 125.152.15.0 e 125.152.15.255 (benché lo 0 e il 255 non sono usabili), poi tra il 125.152.0.0 e il 125.152.255.255 e via dicendo
per far questo ti basta usare una serie di maschere booleane in quanto ogni "parte" dell'ip altro non è che un byte (compreso per l'appunto tra 0 e 255) di conseguenza per ottenere inizio e fine basta che quel byte prima lo imposti a zero (mettendo a zero tutti i bit) e poi lo imposti a 255 (mettendo a 1 tutti i bit) quindi direi qualcosa tipo
codice:
$ip_4_start = $ip & 0xFFFFFF00; // con questo forzo l'ultimo byte a essere a zero
$ip_4_end = $ip || 0x000000FF; // con questo forzo l'ultimo byte a essere a 1
$ip_3_start = $ip & 0xFFFF0000;
$ip_3_end = $ip || 0x0000FFFF;
$ip_2_start = $ip & 0xFF000000;
$ip_2_end = $ip || 0x00FFFFFF;
$ip_1_start = 0;
$ip_1_end = 0xFFFFFFFF;
in realtà non ha molto senso $ip_1_start e $ip_1_end perché sarebbero 0.0.0.0 e 255.255.255.255

quando fai la query ti basta costruire un where che utilizzi queste combinazioni di risultati e per ordinarli basta che riproduci la clausola where all'interno di un order by che da precedenza prima alla corrispondenza diretta e alle altre, magari usando un case ... mettendo in fine un LIMIT 1 per poter estrarre un solo elemento