La estructura de cada tabla seria así:
Tabla Empresa
Descripción: Aquí se guardaran las distintas empresas telefónicas como Claro, Entel, Movistar, etc. y por cada una se hara un informe el cual tendra 3 archivos: Llamadas, Opciones y Transacciones.
id_empresa (autoincremental),
nombre_empresa
Tabla Llamadas:
Descripción: Registra cada llamda hecha al menú de autoatención de cada empresa.
id_llamada (autoincremental),
id_empresa,
duracion_total,
numero_origen,
numero_destino,
fecha_inicio,
fecha_fin
Tabla Opciones:
Descripción: Registra las opciones presinadas por el cliente al momento de llamar a la central (Menú de autoatención como por ejemplo Entel 103)
id_opcion (autoincremental)
id_llamada,
opcion_presionada
Tabla Transacciones:
Descripción : Cuando se presiona una opción del menú de autoatención, se gatillan transacciones, las cuales se registran en esta tabla.
id_trx (autoincremental),
id_llamada,
nombre_trx,
resultado,
duracion
nota: los campos que estan en negrita son referencias de otras tablas, por lo que la relacion entre estas tablas es de 1 a muchas.
Generamos el archivo bash que se guarda con extención .sh, ejemplo: informe.sh y se puede ejecutar así:
1) ./informe.sh
2) sh informe.sh
3) bash informe.sh
#!/bin/bash
user="usuario"
pass="xxxxxx"
db="BaseDeDatoAConectarMysql"
#opcines de columnas en Mysql
opc="--skip-column-names"
#Se necesita que el archivo tenga en su nombre la fecha de ayer
fecha=$(date --date="yesterday" +"%Y%m%d")
#Se quiere 3 informes que sean del dia anterior, ejemplo si hoy es 02/08/2014, entonces
#se requiere un informe de todo el día de ayer de '01/08/2014' hasta '01/08/2014 23:59:59'
#ponermos el intervalo de dias en -1 para restar un dia
intervalo="-1"
#se crea consulta y conexion a mysql. Esta obtiene todas las empresas que seran consultadas #empresa de telefonia (Tabla Empresa).
dbquery=$(mysql -u $user -p$pass $opc -e "use $db;SELECT id_empresa FROM Empresa ")
#se guardan los resultados en un array
arrayApp=($(for i in $dbquery;do echo $i;done))
#corroboramos que esten todos los datos en el array. Descomentar la siguiente linea
#echo ${arrayApp[@]};
#se recorre el array para ejecutar las querys
for i in ${arrayApp[@]}
do
nameFile1="_llamadas_$fecha.txt";
query="SELECT LLA.id_llamada ID_LLAMADA,
LLA.id_empresa ,
LLA.duracion_total ,
LLA.numero_origen,
LLA.numero_destino,
LLa.fecha_inicio,
LLA.fecha_fin,
INTO OUTFILE '/rutaDondeSeGuardara/$i$nameFile1' FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n'
FROM LLAMADAS LLA
WHERE LLA.fecha_inicio>= (CURDATE()$intervalo - INTERVAL 0 DAY + INTERVAL 0 SECOND)
AND LLA.fecha_fin<= (CURDATE()$intervalo - INTERVAL 0 DAY + INTERVAL 86399 SECOND)
AND LLA.id_empresa='$i'
ORDER BY LLa.fecha_inicio ASC;";
mysql -u $user -p$pass -e "use $db;$query"
nameFile2="_opciones_$fecha.txt";
query="SELECT OPC.id_llamada ID_LLAMADA,
OPC.OPCION OPCION
INTO OUTFILE '/rutaDondeSeGuardara/$i$nameFile2' FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n'
FROM OPCIONES OPC,
LLAMADAS LLA
WHERE LLA.fecha_inicio >= (CURDATE()$intervalo - INTERVAL 0 DAY + INTERVAL 0 SECOND)
AND LLA.fecha_fin <= (CURDATE()$intervalo - INTERVAL 0 DAY + INTERVAL 86399 SECOND)
AND LLA.id_empresa='$i'
AND LLA.id_llamada=OPC.id_llamada
ORDER BY LLA.fecha_inicio ASC;";
mysql -u $user -p$pass -e "use $db;$query";
nameFile3="_transac_$fecha.txt";
query="SELECT TRX.id_llamada ID_LLAMADA,
TRX.nombre_trx,
TRX.resultado,
TRX.duracion
INTO OUTFILE '/rutaDondeSeGuardara/$i$nameFile3' FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n'
FROM Llamadas LLA,
Transacciones TRX
WHERE LLA.fecha_inicio >= (CURDATE()$intervalo - INTERVAL 0 DAY + INTERVAL 0 SECOND)
AND LLA.fecha_fin <= (CURDATE()$intervalo - INTERVAL 0 DAY + INTERVAL 86399 SECOND)
AND LLA.id_empresa='$i'
AND LLA.id_llamada=TRX.id_llamada
ORDER BY LLA.fecha_inicio ASC";
mysql -u $user -p$pass -e "use $db;$query";
done
Nota: este codigo fue testeado en un Shell, pero se cambiaron las tablas de las consultas, las cuales no estan testeadas, por lo que puede existir un error de consultas.
Estimado como estas, como arias si tienes 2 campos y quieres saber q campo usar dentro del for.
ResponderEliminar