Problema con consulta MySQL para reportes de ventas

DL

Hola comunidad, tengo un pequeño problema, resulta que estoy haciendo reportes de ventas con gráficos, hasta ahí todo bien. El problema es el siguiente: Hay días en que se realizan ventas y otros que no y por lo tanto, los días que no se realizan ventas no se graban en la base de datos como se ve en la primera imagen. Pero cuando se consulta las ventas de un rango de días en este caso del 1/10/2019 al 5/10/2019, solo me muestra las ventas de los días que hay almacenados,. Como haría para que los días que no hay ventas al traer me devuelva 0 ya que ahora me devuelve solo tres resultados. los datos que tengo para este ejemplo son en un array 123 , 589 , 586 cuando debería de ser 123, 589, 0, 586, 0. Espera me puedan ayudar y de antemano muchas gracias. Pdt. No necesariamente la solución deba de ser en una consulta sql. psdt2. Estoy usando laravel 5.8.

Avatar

mmm , nose si puedas utilizar count() de php , y utilizar un cilo, if, osea if(Count($MICONSULTASQL)){ $MiVariable=0; // Demás instrucciones } mmm , solo es una idea, no se si te serviria, saludos

Avatar

Eso lo tendrías que controlar por tu backend, sabiendo ya el rango de fechas le vas sumando un día desde la primera hasta la última fecha y vas buscando cada fecha dentro de tu consulta, si la fecha no existe le colocas 0 en ventas y si existe le colocas la cantidad que te trae la consulta. Lo otro que podrías hacer es esa misma lógica pero en un procedimiento almacenado de la base de datos

AN

Postea tu query de Eloquent para tener una mejor idea de lo que tienes actualmente.

PD: Cuando pidas ayuda debes ayudar a los demás a ayudarte. Deberías postear toda la información relevante.

Avatar

Hay múltiples maneras de resolverlo:

  1. Buscar una tabla que tenga todas la fechas que necesitas para seleccionarlas y luego con un righ o left join unirla con tu query de lo datos.
  2. Guardar lo datos en un tabla temporal y rellenar la fecha que faltan con un loop.
  3. Construir una tabla temporal con la fechas que requieres, ya sea vía loop o tally table, y luego unir con join.

Ojo: Altamente recomendado leer sobre Tally Tables https://www.sqlservercentral.com/articles/the-numbers-or-tally-table-what-it-is-and-how-it-replaces-a-loop-1

Yo soy full SQL Server.

Recuerda iniciar sesión para participar en la comunidad.