2013/1/20 Ruben Fitó <[email protected]> > Gracias por las respuestas, > > En primer lugar, comentaros que he conseguido obtener el producto a través > del producto_id. > > SELECT *tipo_producto* FROM *tabla_productos_por_cliente* WHERE * > producto_id*~('^'||*tipo_producto*::TEXT) ORDER BY LENGTH(*tipo_producto*) > DESC LIMIT 1; > > Con esta consulta me aseguro coger el tipo_producto que coincida con más > "dígitos" de producto_id. > > Hola. El algoritmo que aplicaste para buscar el producto se llama *best matching* y se utiliza mucho en el dominio de la telefonía para identificar a qué localidades pertenecen los números discados. En PostgreSQL existe el módulo contrib PREFIX construido específicamente para simplificar y acelerar este tipo de consultas: https://github.com/dimitri/prefix
Te servirá en caso de que necesites agilizar las consultas anteriores. El uso de prefix es hasta 4 veces más rápido que la consulta que hiciste. Si la performance no es un problema, probablemente no convenga incorporarlo. Si bien es muy simple de hacerlo si requerirá que redefinas el tipo de dato del campo código. En fin, pensé podrían interesarte estos datos. Saludos, Fernando.
