[Madrid-pm] ¿cual es el mejor camino: sql o perl?

PEGG preiddy en gmail.com
Jue Ene 31 10:53:36 PST 2008


Hola, tengo un pequeño problema y no se como resolverlo de la mejor manera.
Si por sql directamente o con un script de perl.
Tengo una tabla en mysql que tiene un id que puede aparecer una o mas veces,
y una dirección asociada.
ejemplo:
ISI:000088317500003 LIP LISBON, LISBON, PORTUGAL.
ISI:000088317500003 OTRA DIFERENTE, SPAIN.
ISI:000222193200001 BRADLEY UNIV, PEORIA, IL 61625 USA.
ISI:000240793800012 CIC BIOGUNE, BIZKAIA, SPAIN

Ahora bien, se requiere que por cada id se sepa si hay mas de uno. Si hay
mas de uno saber si tienen o no spain. En el caso de los ejemplo anteriores
la tercera y la cuarta dirección tienen el id una sola vez. La primera y la
segunda se repite el id, y uno tiene spain.

El resultado final seria algo como esto:
ISI:000088317500003 LIP LISBON, LISBON, PORTUGAL. CON_COLAB INT
ISI:000088317500003 OTRA DIFERENTE, SPAIN. CON_COLAB INT
ISI:000222193200001 BRADLEY UNIV, PEORIA, IL 61625 USA. SIN_COLAB INT
ISI:000240793800012 CIC BIOGUNE, BIZKAIA, SPAIN CON_COLAB NAC
ISI:000240793800012 OTRA DIFERENTE, SPAIN.  CON_COLAB NAC
ISI:999240769852324 CIC BIOGUNE, BIZKAIA, SPAIN SIN_COLAB NAC

Para llegar a esa solución ideal, creo que el procedimiento seria:
1. Identificar si el id esta una o mas veces
2. Si esta una vez ver si es nacional (spain) o internacional
2.1 si es nacional imprime o agrega a la tabla: SIN_COLAB - NAC
2.2 si es internacional imprime o agrega a la tabla: SIN_COLAB - INT
3. Si está mas de una vez
3.1 si todas las direcciones son spain imprime o agrega a la tabla:
CON_COLAB - NAC
3.2 si una o mas son diferentes a spain imprime o agrega a la tabla:
CON_COLAB - INT

Se que en mysql se puede lograr haciendo varias consultas anidadas y usando
sentencias como el CASE, por lo que el servidor estará (o eso creo)
procesando constantemente cuando se ejecute la consulta para ver los datos.

Con perl se puede crear una tabla nueva y meter el resultado y cuando se
agreguen nuevos registros ejecutarlo nuevamente. Lo que no se es que para
poder ver el id con todos los registros asociados tendría que crear un array
con todas las direcciones y luego ir recorriendo ese array para ver si
cumple o no los patrones. El problema es que estoy hablando de una tabla que
tiene mas de 5 millones de direcciones.
¿Alguna idea? Agradezco sus comentarios de antemano, quizas me estoy
ahogando en un vaso de agua y no me he dado cuenta.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://mail.pm.org/pipermail/madrid-pm/attachments/20080131/c4edc35a/attachment.html 


Más información sobre la lista de distribución Madrid-pm