entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Mostrar datos semanalmente con PHP

Hola!!!
necesito ayuda con un pequeño dilema...
Tengo mi base de datos y mi php funcionando al 100 pero ahora por requisitos tengo que hacer que se muestre mi lista de datos semanalmente, a esto me refiero que no tengo que introducir ninguna fecha de inicio ni de fin, sino que me lo de automáticamente. Alguien sabe como hacerlo ???
De ante mano muchas gracias

2votos

Peter comentado

¿Cual es tu lista de datos?

Por favor edita tu pregunta y agrega el código PHP que tienes.

Saludos.

0voto

kari comentado

Mi lista es demaciado larga pero pongo algunos nada mas:

2016-06-14 18:28:51 SIM NO TEMM $ 30.0000 $ 30.0000 - $ 10 - $ 40 $ 0
2016-06-15 10:22:29 SIM NO TEMM $ 30.0000 $ 30.0000 - $ 10 - $ 40 $ 0
2016-06-16 20:39:00 SIM NO TEMM $ 30.0000 $ 30.0000 - $ 10 - $ 40 $ 0
2016-06-10 22:40:48 SIM NO TEMM $ 30.0000 $ 30.0000 - $ 10 - $ 40 $ 0
2016-06-17 22:21:00 SIM NO TEMM $ 30.0000 $ 30.0000 - $ 10 - $ 40 $ 0
2016-06-15 18:13:21 SIM NO TEMM $ 30.0000 $ 30.0000 - $ 10 - $ 40 $ 0
2016-06-10 22:36:33 SIM NO TEMM $ 30.0000 $ 30.0000 - $ 10 - $ 40 $ 0
2016-06-10 22:40:48 SIM NO TEMM $ 30.0000 $ 30.0000 - $ 10 - $ 40 $ 0
2016-06-17 22:36:15 SIM NO TEMM $ 30.0000 $ 30.0000 - $ 10 - $ 40 $ 0
2016-06-11 20:50:36 SIM NO TEMM $ 30.0000 $ 30.0000 - $ 10 - $ 40 $ 0
2016-06-19 20:35:18 SIM NO TEMM $ 30.0000 $ 30.0000 - $ 10 - $ 40 $ 0
2016-06-17 21:42:00 SIM NO TEMM $ 30.0000 $ 30.0000 - $ 10 - $ 40 $ 0
2016-06-17 22:24:46 SIM NO TEMM $ 30.0000 $ 30.0000 - $ 10 - $ 40 $ 0
2016-06-10 22:33:10 SIM NO TEMM $ 30.0000 $ 30.0000 - $ 10 - $ 40 $ 0

Y yo ahora con las fechas que tengo en mi lista tengo que hacer que se vean solo lo de la semana actuaL, ejemplo:

Tengo estas fechasen mi base de datos

2016-06-10
2016-06-12
2016-06-17
2016-06-22
2016-06-23
2016-06-9
2016-06-1
2016-06-30
2016-06-28

Los datos que me deberían estar saliendo en esta semana solo deberían ser
2016-06-30
2016-06-28
con todas sus características (lista) y ya no todos los datos, pero sin yo tenerle que poner fecha de inicio y de fin

1voto

Leonardo-Tadei comentado

Además del código PHP, la estructura de las tablas con los datos a mostrar y dibuja o escribe de qué forma se tienen que mostrar los datos...

0voto

kari comentado

CODIGO****

<?php
include('php/conexion.php');
?>

<!DOCTYPE html>
<html class="no-js">
<head>
    <meta charset="utf-8">
    <title>Reporte Salvador</title>
    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1.0">
    <link rel="stylesheet" href="css/main.css">
</head>
<body style="background-color:#FFF">
<div id="page-container">
</div> 
<h1 align="center">"REPORTE DE VENTAS ***"</h1> 
<div class="col-md-*">
 <div class="col-md-6" align="right">
  <form action="index.php" method="post">
 <input type="image" src="img/regresar.png" width="150" height="67">
 </form> 

 </div>
 <div class="col-md-6" align="left"> 
<form action="excel_marco.php" method="post">
 <input type="image" src="img/descarga.png" width="250" height="67">
 </form>
 </div>
</div>
<div id="content">
<div class="col-md-12">
    <br>
<div class="block" style="background-color:#FFF">
<div class="row">
<div class="col-md-12">
    <div class="col-md-*" align="center">
        <div class="table-responsive">

            <table border="0" id="datatable" class="table table-vcenter table-condensed table-bordered" align="center">
                <thead align="center">
                    <tr bgcolor="#000000" align="center">
                        <th class="celda4"><font color='#FFFFFF'>Fecha</font></td>

                        <th class="celda4" style="height:20px"><font color="#FFFFFF">Marca</font></td>
                        <th class="celda4"><font color="#FFFFFF">Costo</font></td>
                        <th class="celda4"><font color='#FFFFFF'>Precio</font></td>
                        <th class="celda4"><font color="#FFFFFF">Sim</font></td>
                        <th class="celda4"><font color="#FFFFFF">Recarga</font></td>
                        <th class="celda4"><font color='#FFFFFF'>Comision</font></td>
                        <th class="celda4"><font color="#FFFFFF">Precio/Venta</font></td>
                        <th class="celda4"><font color='#FFFFFF'>Ganancia</font></td>
                    </tr>
                    <?php
                        $db=new MySqli();
                        $sql= "SELECT DISTINCT
                        u.id as id_sales,
                        u.date as date, 
                        u.biller_id as biller_id,
                        c.id as id_company,
                        c.company as company,
                        e.cost as cost, 
                        e.id as id_product, 
                        e.name as name, 
                        e.price as price ,
                        e.category_id as category_id,
                        s.id as id_item,
                        s.sale_id as sale_id,
                        s.product_id as product_id,
                        a.id as id_category
                        FROM  
                        sma_sales as u, 
                        sma_companies as c, 
                        sma_products as e, 
                        sma_sale_items as s, 
                        sma_categories as a 
                        WHERE c.id = u.biller_id 
                        AND u.id = s.sale_id
                        AND s.product_id = e.id
                        AND c.id=14
                        GROUP BY s.id
                        ORDER BY u.biller_id, e.cost, e.name";
                        $result = mysqli_query($conexion,$sql);
                        $suma_cost=0;
                        $suma_price=0;
                        $suma_sim=0;
                        $suma_total=0;
                        $suma_ganancia=0;
                        $suma_comision=0;
                        $suma_rec=0;
                        while($res = mysqli_fetch_assoc($result))                           
                        {
                        $category_id=$res["category_id"];
                        if($category_id==1 || $category_id==2 || $category_id==3 || $category_id==4 || $category_id==6)
                        {
                        $date=$res["date"];
                        $vendedor=$res["company"];
                        $marca=$res["name"];

                        $costo=$res["cost"];
                        $var=$costo;
                        $suma=$suma_cost;
                        $suma_cost=$var + $suma;                                    

                        $precio=$res["price"];
                        $var_price=$precio;
                        $suma_price=$suma_price;
                        $suma_price=$var_price + $suma_price;

                        $recarga="10";
                        $var_rec=$recarga;
                        $suma_s=$suma_rec;
                        $suma_rec=$var_rec + $suma_s;
                    ?>
                    <tr>

                        <td align="center" class="celda10" bgcolor="#FFFFFF"><?php echo $date;?></td>

                        <td align="center" class="celda8" bgcolor="#FFFFFF"><?php echo $marca;?></td>
                        <td align="center" class="celda2" bgcolor="#FFFFFF"><?php echo "$ " .$costo;?></td>
                        <td align="center" class="celda3" bgcolor="#FFFFFF"><?php echo "$ " .$precio;?></td>
                        <?php
                        if($category_id==2)
                        {
                            $sim="-";

                        ?>
                        <td align="center" class="celda4" bgcolor="#FFFFFF"><?php echo "" .$sim?></td>
                        <?php
                        }else
                        {
                            $sim="30";
                            $var_sim=$sim;
                            $suma_s=$suma_sim;
                            $suma_sim=$var_sim + $suma_s;

                        ?>
                        <td align="center" class="celda4" bgcolor="#FFFFFF"><?php echo "$ " .$sim?></td>
                        <?php
                        }
                        ?>    
                        <td align="center" class="celda5" bgcolor="#FFFFFF"><?php echo "$ " .$recarga;?></td>   
                        <?php

                        if($category_id==1)
                        {
                            $comision="30";
                            $var_comi=$comision;
                            $suma_comi=$suma_comision;
                            $suma_comision=$var_comi + $suma_comi;                          
                        ?>
                        <td align="center" class="celda6" bgcolor="#FFFFFF"><?php echo "$ " .$comision;?></td>
                        <?php
                        } else
                        {
                            $comision="-";
                        ?>
                        <td align="center" class="celda6" bgcolor="#FFFFFF"><?php echo "" .$comision;?></td>
                        <?php
                        }
                        $total=$precio+$sim+$recarga+$comision;
                        $ganancia=$precio-$costo;
                        /*$var_total=$total;
                        $suma_tot=$suma_total;
                        $suma_total=$var_total + $suma_tot;*/
                        ?>

                        <td align="center" class="celda7" bgcolor="#FFFFFF"><?php echo "$ " .$total;?></td>
                        <td align="center" class="celda7" bgcolor="#FFFFFF"><?php echo "$ " .$ganancia;?></td>
                  </tr>
                        <?php

                        $var_total=$total;
                        $suma_tot=$suma_total;
                        $suma_total=$var_total + $suma_tot;

                        $var_ganancia=$ganancia;
                        $suma_ga=$suma_ganancia;
                        $suma_ganancia=$var_ganancia + $suma_ga;

                            }//FIN DE PRIMER IF 
                        }// fin del while
                        ?>
<h2><?php //echo $vendedor; ?><h3>

<?php
$tota="Total";
?>

<td align="center" class="celda2" bgcolor="#FFFFFF"></td>
<th bgcolor="#000000" align="center" class="celda4"><font color='#FFFFFF'>Total</font></th>

<td align="center" class="celda1" bgcolor="#CCCCCC"><?php echo "$ " .$suma_cost;        echo ".00"?></td>
<td align="center" class="celda2" bgcolor="#CCCCCC"><?php echo "$ " .$suma_price;       echo ".00"?></td>
<td align="center" class="celda3" bgcolor="#CCCCCC"><?php echo "$ " .$suma_sim;         echo ".00"?></td>
<td align="center" class="celda4" bgcolor="#CCCCCC"><?php echo "$ " .$suma_rec;         echo ".00"?></td>
<td align="center" class="celda5" bgcolor="#CCCCCC"><?php echo "$ " .$suma_comision;    echo ".00"?></td>    
<td align="center" class="celda6" bgcolor="#CCCCCC"><?php echo "$ " .$suma_total;       echo ".00"?></td>   
<td align="center" class="celda7" bgcolor="#CCCCCC"><?php echo "$ " .$suma_ganancia;    echo ".00"?></td>

</table>
</form>

</div>
    </div>
</div>
<br>
</div>
</div>
</div>
</div>

    <a href="#" id="to-top"><i class="fa fa-angle-up"></i></a>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script>!window.jQuery && document.write(decodeURI('%3Cscript src="js/vendor/jquery-1.11.1.min.js"%3E%3C/script%3E'));</script>
    <script src="js/vendor/bootstrap.min1.js"></script>
    <script src="js/plugins1.js"></script>
    <script src="js/app1.js"></script>
    <script>$(function(){ Login.init(); }

2 Respuestas

2votos

Leonardo-Tadei Puntos227320

Hola @kari,

para mostrar lsa fechas por semana, podés usar la función MySQL week(), que aplicada a una fecha, te devuelve el número de semana del año correspondiente. Acá tenés un resumen de como se usa la función.

Supongamos que querés ver los datos de la semana 25 del año. Podés hacer algo como:

SELECT DISTINCT
                        u.id as id_sales,
                        u.date as date, 
                        u.biller_id as biller_id,
                        c.id as id_company,
                        c.company as company,
                        e.cost as cost, 
                        e.id as id_product, 
                        e.name as name, 
                        e.price as price ,
                        e.category_id as category_id,
                        s.id as id_item,
                        s.sale_id as sale_id,
                        s.product_id as product_id,
                        a.id as id_category
                        FROM  
                        sma_sales as u, 
                        sma_companies as c, 
                        sma_products as e, 
                        sma_sale_items as s, 
                        sma_categories as a 
                        WHERE c.id = u.biller_id 
                        AND u.id = s.sale_id
                        AND s.product_id = e.id
                        AND c.id=14
                        AND WEEK(u.date) = 25
                        GROUP BY s.id
                        ORDER BY u.biller_id, e.cost, e.name

Esto te devolverá solo los registros cuyas fechas sean de la semana 25 del año.

Si querés mostrar los datos de la semana actual, basta con reemplazar el número 25 con una variable que contenga el valor de dicha semana.

$semana = date("W");

Para recorrer las semanas, podrías poner un botón de "semana anterior" y otro de "semana siguiente" que aumenten y resten 1 a la semana actual, con la salvedad que si el valor es 52 tenés que pasar a 0 avanzado y al revés si vas retrocediendo; también podrías poner una caja desplegable con las 52 semanas para que se pueda seleccionar qué semana ver... eso es ya cuestión de la interfaz y de pasarse por GET o POST los valores de semana para la query.

Saludos cordiales!

PD: según la versión de MySQL puede que la primer semana sea 1 y no 0.
PPD: alguna versión vieja de MySQL puede no aceptar un datetime como parámetro de week(), en ese caso, basta con convertirlo primero a date.

0voto

kari Puntos420

Muchas Gracias @Leonardo-Tadei
De hecho pude resolver mi duda utilizando esto

$primer_dia = time();
$ultimo_dia = time();
while(date("w",$primer_dia)!=1)
{
    $primer_dia -= 3600;
}
while(date("w",$ultimo_dia)!=0)
{
    $ultimo_dia += 3600;
}
    $dia1=date("Y-m-d",$primer_dia);
    $dia7=date("Y-m-d",$ultimo_dia);
$date=$res["date"];

Y eso fue lo que puse en mi condición
Espero a alguien le sirva o si tienen alguna duda en base al código PREGUNTEN!!!

0voto

Leonardo-Tadei comentado

Gracias por compartir la respuesta. Lo divertido de la programación es que no hay una solo respuesta correcta para las cosas!

Te comento que es mucho más eficiente hacer la consulta con WEEK() en la query, además de que requiere usar solo una vez date() en PHP. Medí la diferencia de tiempos y de RAM para comprobarlo: te lleva solo unos minutos cambiar el código y hacer la prueba.

Saludos cordiales!

0voto

kari comentado

Gracias, lo pondré en practica, solo tengo una cuestion y es que el usuario no tiene que seleccionar que semana desea ver sino que automaticamente muestre lo de la semana actual.. Se puede hacer igual con WEEK()??

1voto

Leonardo-Tadei comentado

Claro que sí!

Fijate en mi respuesta en dónde digo que

$semana = date("W");

devuelve justamente la semana actual, para poder usar ese valor en la query.

1voto

kari comentado

Me funciono muchísimo mejor que lo que yo tenia.
Enserio muchas GRACIAS @Leonardo-Tadei

0voto

Peter comentado

Por favor selecciona la respuesta que tiene tu solución.

Saludos.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta