PHP Ejemplos

Buscar por fechas en MySQL: Operador AND y BETWEEN

Comparar rango fechas correctamente en PHP & MySQL

Buscar por fechas en MySQL. En ocasiones tenemos que llegar a este tema de la búsqueda por rango de fechas en MySQL y en este artículo daremos 2 ejemplos completos para buscar fechas de una manera óptima.

Buscar por fechas en MySQL: Operador AND y BETWEEN
Buscar por fechas en MySQL: Operador AND y BETWEEN

Hay que analizar que la columna se de tipo date y deberías usar un "=" junto con el dato a comparar:

SELECT * FROM [tabla]
WHERE [columna (date)] = [atributo (date)]

O un BETWEEN si es en un rango de fechas:

SELECT * FROM tablename 
WHERE columname BETWEEN '2021-09-25' AND '2021-10-25'

Con esto ya tenemos una idea para preparar nuestra consulta SQL, ya sea por una fecha o rango de fechas.

Buscar por fechas en MySQL

A continuación, mostraremos las dos formas para buscar por rangos de fechas.

Relacionado  Búsqueda y paginación PHP usando PDO

a) Buscar usando operador AND de MySQL

La condición AND de MySQL (también llamada operador AND) se usa para probar dos o más condiciones en una instrucción SELECT, INSERT, UPDATE o DELETE.

Formulario HTML5

Nos permitirá la interfaz gráfica para recoger las fechas y posteriormente buscar en MySQL

<form action="" method="post">
<div class="col-md-3"> 
<label for="inputMarca">Fecha 01:</label>
<input type="date" class="form-control" name="fecha1" value="<?php echo isset($_POST['fecha1'])?$_POST['fecha1']:''; ?>" required>
</div>
<div class="col-md-3">
<label for="inputMarca">Fecha 02:</label>
<input type="date" class="form-control" name="fecha2" value="<?php echo isset($_POST['fecha2'])?$_POST['fecha2']:''; ?>" required>
</div>
<div class="col-md-3">
<div class="form-group">

<label>&nbsp;</label>
<div>
<button type="submit" name="submit" value="search" id="submit" class="btn btn-primary"><i class="fa fa-fw fa-search"></i> Buscar</button>
</div>
</div>

</div>
</form>

Condicional IF ELSE

Usaremos condicionales para optimizar la consulta SQL en el hipotético caso que el usuario no rellene el formulario o mostrar resultados por defecto en un determinado rango de fechas.

Caso contrario, mostrara los valores enviado por el formulario que desencadenara la búsqueda en MySQL. Por lo tanto, recuperamos los valores del formulario usando PHP.

if($_POST["fecha1"]!=""){
$fecha1 = htmlentities($_POST["fecha1"]);
}else{
$fecha1 = date("Y-m-d",strtotime(date("Y-m-d")."- 1 month")); 
}
//fecha 02
if($_POST["fecha2"]!=""){
$fecha2 = htmlentities($_POST["fecha2"]);
}else{
$fecha2 = date("Y-m-d"); 
}

Proceso de la información SQL

Procesamos los valores del formulario haciendo uso de una consulta SQL mediante PDO que es el más recomendado por seguridad y optimización.

$stmt = $connect->prepare("
SELECT SUM(monto) 
from ingresos
WHERE fecha >= :startDate AND fecha<= :endDate");

$stmt->bindParam(':startDate',$fecha1);
$stmt->bindParam(':endDate',$fecha2);
$stmt->execute();
$totali = $stmt->fetch(PDO::FETCH_NUM);
$total_ingreso = $totali[0];

Imprimirá la suma de registros obtenidos en la consulta, en el ejemplo deseamos obtener el valor total de los ingresos a través de un rango de fechas.

Relacionado  Generate PDF file from PHP MySQL: Ejemplo completo

b) Buscar usando operador BETWEEN

Si se trata de fechas, el más recomendado es el operador BETWEEN. Recordemos que este operador trabaja dentro de la cláusula WHERE en una consulta SQL para seleccionar valores entre un rango de datos.

$stmt = $connect->prepare("SELECT SUM(monto) from ingresos 
WHERE fecha BETWEEN :startDate AND :endDate");

$stmt->bindParam(':startDate',$fecha1);
$stmt->bindParam(':endDate',$fecha2);
$stmt->execute();
$totali = $stmt->fetch(PDO::FETCH_NUM);
$total_ingreso = $totali[0];

c) Buscar y visualizar registros MySQL con FOREACH

El anterior ejemplo da como resultado la sumatoria de registros para obtener el monto total de una columna si se trata de mostrar dinero.

Relacionado  Subir archivos arrastrar y soltar con PHP, jQuery

Aquí, les dejare un ejemplo si desean mostrar los registros en una lista y si desean pueden incorporar una tabla haciendo uso de ciclo foreach del PHP.

//Uso de consultas preparadas para evitar la Inyección SQL.
$sql = "SELECT * FROM persona WHERE fecha_nacimiento BETWEEN :inicio AND :fin;";

$stmt = $pdo->prepare($sql);
$stmt->bindValue(":inicio",$fecha1);
$stmt->bindValue(":fin",$fecha2);


$stmt ->execute();
$arrDatos = $stmt->fetchAll(PDO::FETCH_ASSOC);

if ($arrDatos)
{
echo "<pre>";
echo "CONSULTA 1: SE ENCONTRARON ".count($arrDatos). " REGISTROS\n";
print_r($arrDatos);

$strLista="\n\nLISTA DE DATOS CONSULTA 1:\n";
foreach ($arrDatos as $row)
{
echo "Id: ".$row["persona_id"];
echo "Nombre: ".$row["persona_nom"];
echo "Fecha: ".$row["fecha_nacimiento"];

}

echo "</pre>";

}
else
{
echo "No hay datos";
}

Conclusión

Si tienen problemas con filtrar fechas en MySQL aquí hemos aprendido dos formas para lograr el objetivo deseado. Sin embargo, el método más recomendado es usar el operador BETWEEN.

Si están trabajando con consultas SQL, lo recomendado es usar la conexión PDO y también en la programación. Por lo tanto, recordemos que PDO tiene que estar configurado para la seguridad.

Otro detalle, debemos de hacer uso de PDO en las consultas preparadas para evitar la Inyección SQL.

Espero que esta explicación sea de su agrado y les ayude en sus proyectos web.

Descarga 204 Script y Sistemas PHP & MySQL

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba