Hace un par de días, se me presento un “problema” tenia que hacer un reporte con datos de una base de datos MySQL.
En el reporte tenia que mostrar dos consultas de dos diferentes tablas que en ocasiones están relacionadas y en ocasiones no.
El asunto es que la consuta tenia que ser una sola, para mostrar los datos unificados y no por separados.
y la solución a mi problema fue hacer una Subconsulta aquí les dejo lo que hice.
SELECT
sub.Name,
sub.nro_factura_c,
sub.fecha_factura_c,
sub.total_c,
sub.moneda_factura_c,
sub.numero_recibo,
sub.amount,
sub.moneda_recibo
FROM(
(SELECT
a.Name,
ifc.nro_factura_c,
ifc.fecha_factura_c,
ifc.total_c,
ifc.moneda_factura_c,
ic.name AS numero_recibo,
ic.amount,
icc.moneda_c AS moneda_recibo
FROM
infor_cobranza ic,
accounts a,
infor_facturacion_cstm ifc
RIGHT OUTER JOIN infor_factufor_cobranza_c ifcc
ON ifcc.infor_factcf57uracion_ida = ifc.id_c
LEFT OUTER JOIN infor_cobranza_cstm icc
ON ifcc.infor_factc913obranza_idb = icc.id_c
AND ifcc.deleted = 0
WHERE
a.id = ifc.account_id_c
AND a.id = icc.account_id_c
AND ic.id = icc.id_c
AND a.Name = '$nombre' and ifc.fecha_factura_c between '$desde' and '$hasta' ORDER BY a.Name, ifc.nro_factura_c)
UNION
(SELECT
a.Name,
ifc.nro_factura_c,
ifc.fecha_factura_c,
ifc.total_c,
ifc.moneda_factura_c,
ifc.cliente_fac_copia_c,
ifc.consumofinal_c,
ifc.rut_c
FROM
accounts a,
infor_facturacion_cstm ifc
WHERE
a.id = ifc.account_id_c
AND a.Name = '$nombre' and ifc.fecha_factura_c between '$desde' and '$hasta' ORDER BY a.Name, ifc.nro_factura_c)
) AS sub GROUP BY sub.nro_factura_c
Como veran, hice una Subconsulta y dentro de ella uni dos consultas que traen diferentes resultados.
PD.: Poco a poco se van presentando problemas mas complejos…
Tags: MySQL,
PHP,
Programacion