Un ejemplo:
Código MySQL:
Ver originalSELECT subctas38.clasct
, subctas38.numero
, subctas38.titulo
, SUM(diario38.debe
) AS 'debe', SUM(diario38.haber
) AS 'haber' FROM subctas38
, diario38
WHERE subctas38.clasct
= diario38.clasct
AND year(diario38.fecha
)=2012 AND diario38.fecha
<= DATE(2012, 11, 30) AND numero
>=430000000 AND numero
<440000000
//Efectos totales
WHERE efectos.clacli
=clientes.clacli
AND clientes.nctacon
=$cuenta_cliente
//Efectos devueltos
WHERE efectos.clacli
=clientes.clacli
AND clientes.nctacon
=$cuenta_cliente
//Efectos pendientes
WHERE efectos.clacli
=clientes.clacli
AND clientes.nctacon
=$cuenta_cliente
//Efectos posteriores
WHERE efectos.clacli
=clientes.clacli
AND clientes.nctacon
=$cuenta_cliente
//Total
Meto los datos en un array que finalmente se mostrarán en el CSV
Tarda unos 10 minutos. Al final del script tengo todos los datos en $resultado y los imprimo en un CSV con una clase que tengo.
Funciona así. Con la primera consulta saco el nombre, cuenta y algunos datos que necesito de los clientes, así como el haber y el debe total del año hasta el mes que le indico.
Luego para cada cliente tengo que sacar diferentes cantidades de los efectos, vienen de otra base de datos y es para comparar la contabilidad con el programa de gestión y ver si coinciden los datos.
Claro, por cada usuario tiene que sacar mogollón de información. Además los efectos me pidieron que sean desde "siempre", en este caso 2008 que es desde cuando existe la empresa, hasta el mes que le digan.
Si se te ocurre alguna forma de optimizarlo bienvenida sea.
Además tenemos 3 empresas o nombres comerciales y tengo que hacer eso por triplicado, pero ya ni me planteo sacar todos los datos juntos. Los saco de una en una eligiendo en otra ventana con un select la empresa que te interese, la fecha, etc.
Recuerda que es un ODBC que va con DBase y no soporta muchas opciones de BD modernas.
No se si es que no se lo suficiente o es lo que hay y no puedo sacar los datos de forma más eficiente.
PD: Si vas a sugerir subconsultas que sepas que no las soporta en la parte SELECT, solo en la parte WHERE puedo realizar subconsultas.