php comparando fechas
Frecuentes
Visto 493 equipos
0
tengo una tabla con dos campos
competition {stateTime, endTime}
cuando inserto en esa tabla, quiero asegurarme de que el valor que quiero insertar no esté en el período de ninguna fila en esa tabla, escribo esta función (Base de datos PDO)
function isCompetitionInAnotherCompetition($startTime, $endTime) {
$query = "SELECT * FROM competition";
$sth = $this->db->prepare($query);
$sth->execute(array());
while ($row = $sth->fetch()) {
if ($startTime >= $row['startTime'] && $startTime <= $row['endTime'])
return true;
if ($endTime >= $row['startTime'] && $endTime <= $row['endTime'])
return true;
}
return false;
}
pero no funciona bien, cada fecha en la base de datos es yyyy-mm-dd
, ejemplo 2012-01-15
1 Respuestas
1
¿Puedo sugerir que, en lugar de escribir una función que pruebe la existencia y devuelva un bool que devuelva los registros, de esta manera puede probar más tarde si no se devolvió ninguno, pero si lo hubo, puede usarlos si es necesario? Como sugiere Alvin Wong, puedes usar BETWEEN
en tu sql para que obtengas algo como esto.
function getCompetitionsBetween($startTime, $endTime) {
$startTime = date("Y-m-d", $startTime);
$endTome = date("Y-m-d", $startTime);
$query = "SELECT * FROM competition
WHERE start_time BETWEEN ? AND ?
OR end_time BETWEEN ? AND ?";
$sth = $this->db->prepare( $query );
$sth->execute( array($startTime, $endTime, $startTime, $endTime) );
return $sth->fetchAll();
}
y más tarde/en otro lugar
$competitions = getCompetitionsBetween($startTime, $endTime);
if (empty(competitions)) {
$this->save();
} else {
echo ('sorry the following competitions conflict with these dates');
foreach($competitions as $k => $v) {
echo ($k . ':' . $v);
}
}
Respondido 01 Jul 12, 16:07
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas php mysql pdo or haz tu propia pregunta.
¿Por qué no simplemente usar
BETWEEN
or< > <= >=
en el capítulo respecto a laWHERE
cláusula de la instrucción SQL y utilizar el recuento de filas de salida? - Alvin Wong@AlvinWong lo intentaré - Totti
@AlvinWong funciona, escríbalo como respuesta para aceptarlo - Totti