Я предполагаю, что у вас есть таблица типа:
prefix (id, number)
с данными типа:
1, '39'
2, '393'
3, '33'
4, '331'
Вы можете получить самый длинный матч с reverse LIKE :
SELECT id
FROM prefix
WHERE "393234567891" LIKE CONCAT(number, "%")
ORDER BY LENGTH(number)
LIMIT 1;
Я не проверял его, но если предположить, что ваш самый короткий префикс состоит из 2 символов, вы можете получить некоторое улучшение с (это будет проверять только префиксы, начинающиеся с 39
, то есть1% всех префиксов, которые у вас есть):
SELECT id
FROM prefix
WHERE "393234567891" LIKE CONCAT(number, "%")
AND number LIKE "39%"
ORDER BY LENGTH(number)
LIMIT 1;
Тогда вы можете иметь другую таблицу с информацией, прикрепленной к этому префиксу, например:
prefixinfo (id, prefix_id, type, data)
с такими данными, как:
1, 1, 'country', 'Italy'
2, 2, 'country', 'Italy'
3, 2, 'type', 'Landline'
4, 3, 'country', 'France'
5, 4, 'country', 'France'
6, 4, 'city', 'Paris'