1

Tengo una base de datos desde la cual deseo listar el detalle de cuenta corriente de cliente.

Mi estructura es la siguiente:

PAGO(idpago,fecha,idcliente,monto) DETALLETICKET(idticket,idproducto,cantidad,preciou);

el idcliente lo tengo en la tabla ticket. Trabajo con Mysql y php y ademas uso DataTables de JQuery.

Hice lo siguiente:

 SELECT * FROM 
 ticket,detalleticket,producto,pago,movimiento,tipomov 
 where ticket.idc=8 
 AND detalleticket.idticket=ticket.idticket
 and producto.idproducto=detalleticket.idproducto
 and pago.idcliente=ticket.idc 
 and movimiento.idcliente=ticket.idc
 and movimiento.tipomov=tipomov.idtipomov;

introducir la descripción de la imagen aquí

como veran para cada ticket repite el movimiento.

Es decir si un cliente compra 4 articulos se insertan 4 registros en detalleticket. Pero si pago con tarjeta supongamos se mete un registro de pago de tipo tarjeta, pero el pago es uno solo.

La idea mia es armar una sola tabla con debe y haber entonces necesito todo en una consulta. De lo contrario podria concatenar array con php de las consultas?

Utilizando left join hago asi:

    SELECT * FROM ticket left join detalleticket on ticket.idticket=detalleticket.idticket left join producto on producto.idproducto=detalleticket.idproducto left join pago on pago.idcliente=ticket.idc left join movimiento on movimiento.idcliente=ticket.idc LEFT JOIN tipomov on tipomov.idtipomov=movimiento.tipomov where ticket.idc=8;

Igual me muestra tres veces todos los mismos registros, de hecho hay tres registros de movimientos asociados al cliente. Si el cliente paga un poco con tarjeta y otro poco en efectivo se guardan dos registros en la tabla movimiento con el mismo idticket. Como podria hacer

Caruso
  • 883
  • 11
  • 21
  • El problema esta en que estas formulando mal tu consulta debes de usar INNER JOIN O LEFT JOIN sea cual el caso – Edgar Vazquez Sep 20 '19 at 16:23
  • No debe de mostrarlo tres veces? si lo muestra es por que hay hacer el JOIN el registro hace macth con los datos que hay ahi podrias poner un ejemplo de que resultado esperas al final – Edgar Vazquez Sep 20 '19 at 16:46
  • Esta bien que lo muestre 3 veces? Sino hacer otra consulta aparte para los moviemientos de pago..el resultado que quiero es todo en una sola tabla por pantalla, todo lo que compro y los haberes – Caruso Sep 20 '19 at 16:53
  • Si por que como dices si hay varios pagos al cliente te lo mostrara varias veces, otra es como dices separarlo y luego juntarlo de algun modo – Edgar Vazquez Sep 20 '19 at 16:59

1 Answers1

1

Hola prueba con esto y vemos

     SELECT T.idc,DT.idticket FROM ticket T
LEFT JOIN detalleticket DT ON DT.idticket=T.idticket,
LEFT JOIN producto P ON P.idproducto=DT.idproducto,
LEFT JOIN pago PA ON PA.idcliente=T.idc,
LEFT JOIN movimiento MV ON MV.idcliente=T.idc,
LEFT JOIN tipomov TM ON TM.idtipomov=MV.tipomov
 where T.idc=8 

Para traer registros con otras tablas no solo se pone el FROM TablaA,TablaB,TablaC.... Si no eso ocaciona que te pase algo como lo tienes, en vez de eso se debe de hacer relación por medio de JOIN a las tablas en este caso uso LEFT JOIN por que no estoy seguro si pueden haber algunos que no tengan en su campo la relación, si lo que quieres es que solo los que hagan relacion usarias un INNER JOIN en vez de LEFT JOIN.

Aqui hay info hacerca de los JOIN.

¿Cuál es la diferencia entre un inner y un outer join?

Nota*** Quite el * si no treaeria todos los datos por medio de los alias T,DT,MV etc, puedes acceder a los datos de las tablas.

Saludos

Edgar Vazquez
  • 1,548
  • 1
  • 3
  • 11