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

2votos

Consulta en db en base a fecha asignada por usuario

Hola quisiera me pudieran ayudar a resolver mi duda
1.Campos date

           <FONT size=5 color="#000000">Fecha inicio</FONT>
            <input type="date" id="date_inicio" name="date_inicio">
            <FONT size=5 color="#000000">Fecha fin</FONT>
            <input type="date" id="date_fin" name="date_fin">

2.consulta a la base de datos

                                       $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
                                        AND u.date = $date_inicio
                                        GROUP BY s.id
                                        ORDER BY u.biller_id, e.cost, e.name ";

Dependiendo los datos que ingrese en date_inicio y date_fin tengo que realizar la consulta de mi base de datos ¿como puedo hacer eso?
De ante mano muchas gracias

2 Respuestas

1voto

Leonardo-Tadei Puntos227320

Hola @kari ,

el operador BETWEEN, como dice el amigo @carlossevi, tiene varias particularidades según su implementación...

Una forma de escribir la query independientemente de estas cuestiones es así:

...
AND u.id = s.sale_id
AND s.product_id = e.id
AND c.id=14
AND u.date >= '$date_inicio' AND u.date <= '$date_fin'
GROUP BY s.id
ORDER BY u.biller_id, e.cost, e.name ";

Esto te devuelve los reqistros que estén entre las 2 fechas incluyéndolas. Si querés excluir la fecha inicial o final, basta con usar < o > en vez de <= o >=, con lo que tenés mejor control de las cosas.

Nota importante: recuerda hacer un índice del campo u.date, para que la query se ejecute más eficientemente. Como los DATE() son strings, indizarlos es muy importante para agilizar las querys.

Saludos cordiales

0voto

kari Puntos420

Lo solucione añadiendo el BETWEEN, pero al darle buscar me trae los datos menos los de la fecha que puse en $date_inicio..
Alguien podria ayudarme en eso?

AND u.id = s.sale_id
 AND s.product_id = e.id
AND c.id=14
AND u.date BETWEEN '$date_inicio' AND '$date_fin'
GROUP BY s.id
ORDER BY u.biller_id, e.cost, e.name ";

0voto

IronW comentado

Si no te devuelve los datos de la fecha en $date_inicio, ¿puedes restarle 1 día antes de pasarla a la consulta?

0voto

kari comentado

El problema es como realizar la resta de dias, ejemplo:
Me aparece la fecha asi
2016-07-01
Como resto es e1?

1voto

carlossevi comentado

Mira esta documentación sobre el operador BETWEEN:

Notice that the BETWEEN operator can produce different result in different databases!
In some databases, BETWEEN selects fields that are between and excluding the test values.
In other databases, BETWEEN selects fields that are between and including the test values.
And in other databases, BETWEEN selects fields between the test values, including the first test value and excluding the last test value.

¿Que base de datos estás utilizando?

0voto

kari comentado

Muchas gracias por sus respuestas :)

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