Muchas gracias vice, me vino al pelo, me simplificastes las cosas, me esta estaba haciendo un quilombo con tantos join anidados.
Mas o menos el funcionamiento de mis tablas es el siguiente :
Tengo una tabla entradas en la que entran trabajos, cada entrada esta relacionada con dos tablas (1 a varios). una tabla es la de detalles del trabajo que entran todos los articulos del trabajo,sus precio y unidades.
y la otra es la de comisiones, en la que puedo cargar varias comisiones de diferentes trabajadores. Ademas la tabla entradas se relaciona con sus clientes.
Las tablas:
entradas` (
`id_entrada` int(10) unsigned NOT NULL auto_increment,
`id_estado` int(10) unsigned NOT NULL auto_increment,
`codigoentrada` int(10) unsigned default NULL,
`id_cliente` int(10) unsigned default NULL,
`IVA` int(10) unsigned default NULL,
`Descuento` int(10) unsigned default NULL,
...
PRIMARY KEY (`id_entrada`),
----------------
det_entradas` (
`id_detalle` int(10) unsigned NOT NULL auto_increment,
`id_entrada` int(10) unsigned default NULL,
`id_articulo` int(10) unsigned default NULL,
`unidades` int(10) unsigned default NULL,
`precio` double(10,2) default NULL,
PRIMARY KEY (`id_detalle`),
-----------------
det_comisiones` (
`id_detalle` int(10) unsigned NOT NULL auto_increment,
`id_entrada` int(10) unsigned default NULL,
`id_trabajador` int(10) unsigned default NULL,
`porcentajecom` double(10,2) default NULL,
PRIMARY KEY (`id_detalle`),
con estas tablas quiero mostrar por cada entrada los totales por entradas
de todos los detalles y el total de comisiones por cada entrada. Cosa que se me habia complicado pero lo solucione (gracias denuevo vice) con la consulta que pusistes arriba:
SELECT
tblentradas.id_entrada,tblentradas.codigoentrada,t blentradas.nombretrabajo,
tblentradas.fecha_ent,tblentradas.id_ingreso,tblen tradas.fecha_sal,tblentradas.id_salida,tblentradas .descuento,
tblentradas.iva,tblentradas.irpf,tblentradas.id_es tado,tbldptos.codigodpto,medios_ent.nombremedio as nombreingreso,medios_sal.nombremedio as nombresalida,tblclientes.nombrecliente,
(SELECT @f:=SUM(tbldetcomisiones.porcentajecom) from tbldetcomisiones
where tbldetcomisiones.id_entrada=tblentradas.id_entrada ),(select @s:=sum(tbldetentradas.precio*tbldetentradas.unida des) from tbldetentradas
where tbldetentradas.id_entrada=tblentradas.id_entrada)a s base,(((@s-((@s*tblentradas.descuento)/100))*@f)/100)as totalcomi,((@s*tblentradas.descuento)/100)as impdesc,((@s*tblentradas.iva)/100)as impiva,((@s*tblentradas.irpf)/100)as impirpf
from tblentradas
INNER JOIN tblclientes ON tblentradas.id_cliente=tblclientes.id_cliente
INNER JOIN tbldptos ON tblentradas.id_dpto=tbldptos.id_dpto
LEFT JOIN tblmedios as medios_ent ON tblentradas.id_ingreso=medios_ent.id_medio
LEFT JOIN tblmedios as medios_sal ON tblentradas.id_salida=medios_sal.id_medio ".$busqueda." group by id_entrada";
$busqueda=es un where para filtrar (mes y año), clientes.. etc)
al final de todo tambien quiero mostrar los resultados de la suma de todas las entradas que lo que hice fue utilizar la misma consulta anteriror agregandoles unos SUM:
Select tblentradas.id_entrada,tblentradas.descuento,tblen tradas.iva,tblentradas.irpf,
SUM((SELECT @f:=SUM(tbldetcomerciales.porcentajecom)from tbldetcomerciales
where tbldetcomerciales.id_entrada=tblentradas.id_entrad a)),
SUM((select @s:=sum(tbldetentradas.precio*tbldetentradas.unida des) from tbldetentradas
where tbldetentradas.id_entrada=tblentradas.id_entrada)) as base,
SUM((((@s-((@s*tblentradas.descuento)/100))*@f)/100))as totalcomi,SUM(((@s*tblentradas.descuento)/100))as impdesc,SUM(((@s*tblentradas.iva)/100))as impiva,SUM(((@s*tblentradas.irpf)/100))as impirpf
from tblentradas ".$busqueda." group by ' ' "
Hasta ahy to bien creo, pero luego quiero utilizar las misma tabla de entrada
para hacer albaranes y facturas, es decir de una o mas entradas crear un albaran que estaria relacionado con entradas de vaias entradas a un albaran:
tblalbaranes` (
`id_albaran` int(10) unsigned NOT NULL auto_increment,
`id_entrada` int(10) unsigned default NULL,
`codigoalbaran` int(10) unsigned default NULL,
`fecha` DATE default NULL,
PRIMARY KEY (`id_detalle`),
y luego me ocurriria lo mismo que con las entradas tendria que listar totales por albaran y totales generales para lo cual la consulta quedaria:
SELECT tblalbaranes.*,tblentradas.id_entrada,tblentradas. codigoentrada,tblentradas.nombretrabajo,
tblentradas.fecha_ent,tblentradas.id_ingreso,tblen tradas.fecha_sal,tblentradas.id_salida,tblentradas .descuento,
tblentradas.iva,tblentradas.irpf,tblentradas.id_es tado,tbldptos.codigodpto,tblclientes.nombrecliente ,
SUM((SELECT @f:=SUM(tbldetcomisiones.porcentajecom)from tbldetcomisiones
where tbldetcomisiones.id_entrada=tblentradas.id_entrada )),
SUM((select @s:=sum(tbldetentradas.precio*tbldetentradas.unida des) from tbldetentradas
where tbldetentradas.id_entrada=tblentradas.id_entrada)) as base,
SUM((((@s-((@s*tblentradas.descuento)/100))*@f)/100))as totalcomi,SUM(((@s*tblentradas.descuento)/100))as impdesc,SUM(((@s*tblentradas.iva)/100))as impiva,SUM(((@s*tblentradas.irpf)/100))as impirpf
from tblentradas
INNER JOIN tblalbaranes ON tblentradas.id_entrada=tblalbaranes.id_entrada
INNER JOIN tblclientes ON tblentradas.id_cliente=tblclientes.id_cliente
INNER JOIN tbldptos ON tblentradas.id_dpto=tbldptos.id_dpto ".$busqueda." group by tblalbaranes.codigoalbaran";
basicamente este seria el funcionamiento y estructura de mi base de datos.
Lo que no pude lograr en la misma consulta es cuando listo los albaranes o facturas agregarles un campo en el que me muetre a que entradas pertenecen
lo tuve que hacer dentro del
while($registro=mysql_fetch_array($albaranes)) {
}asiendo consulta por cada registro, por eso habia agregado un post en el que queria concatenar filas en un campo.
bueno un saludazo, y hasta la proxima |