From: | Fernando Hevia <fhevia(at)gmail(dot)com> |
---|---|
To: | Ruben Fitó <r(dot)fito(at)ubiquat(dot)com> |
Cc: | "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Consulta compleja |
Date: | 2013-01-21 13:33:31 |
Message-ID: | CAGYT1XTRq=2hLCB1deF2e2Ygb7EnGTg1jTjE8o54mC+YWBEz1Q@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
2013/1/20 Ruben Fitó <r(dot)fito(at)ubiquat(dot)com>
> 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.
From | Date | Subject | |
---|---|---|---|
Next Message | Rafael Valenzuela | 2013-01-21 13:36:28 | Re: Consulta compleja |
Previous Message | Ruben Fitó | 2013-01-20 12:54:22 | Re: Consulta compleja |