Edito:
he borrado la anterior propuesta, para hacerte esta otra:
Código sql:
Ver originalSELECT ta.prefijo, ta.destino, ta.tarifa, LENGTH( ta.prefijo ) digpref
FROM `tarifas` ta
INNER JOIN telefono te ON LEFT( te.telefono, LENGTH( ta.prefijo ) )
ORDER BY digpref DESC
LIMIT 1
con ella encontrará sólo movileespaña cuando empiece por 346, aunque el número de dígitos coincida. En caso de coincidencia desde el comienzo, te mostrará sólo el número que tenga mayor número de coincidencias desde el principio.
Si se trata de una búsqueda y no del cruce de dos tablas, yo usaría algo así, dependiendo del número mayor de dígitos en un prefijo. Imaginemos que son 4
Código sql:
Ver originalSELECT *
FROM `tarifas`
WHERE LEFT( '34636126220', 1 ) = prefijo
OR LEFT( '34636126220', 2 ) = prefijo
OR LEFT( '34636126220', 3 ) = prefijo
OR LEFT( '34636126220', 4) = prefijo
ORDER BY LENGTH( prefijo ) DESC LIMIT 1
Si el número de digitos de los distintos teléfonos (prefijo+resto de número) son distintos todos según el prefijo, resultará mucho más fácil y rápido, pero debes comprobar las distintas posibilidades.
Para esto también podrías usar programación, pero estamos en un foro de base de datos.