Ver Mensaje Individual
  #3 (permalink)  
Antiguo 18/06/2017, 08:47
Avatar de ..::MaRcOs::..
..::MaRcOs::..
 
Fecha de Ingreso: diciembre-2006
Mensajes: 328
Antigüedad: 17 años, 4 meses
Puntos: 3
Respuesta: Horarios de Apertura

Cita:
Iniciado por manuparquegiralda Ver Mensaje
Pues tampoco está mal como dices.

Yo lo haría casi como planteas:

Tabla empresas ( id, nombre, ... )
Tabla empresas_horarios ( id, id_empresa, dia, abre, cierra )

Donde la celda día guardaría el día de la semana en número, 0 para el domingo 7 para el sábado. El número del día de la semana lo puedes saber muy facilmente con la clase DateTime de PHP.

Las celdas abre y cierra las pondría del tipo TIME.

De este modo tendrías una tabla con estos registros

empresas

--- ID ----------- NOMBRE
--- 0 -------------- Zara
--- 1 ----------- Pull & bear

empresas_horarios

--- ID --- ID_EMPRESA --- DIA ------- ABRE -------- CIERRA
--- 0 -------- 0 --------- 1 ------ 10:00:00 ----- 21:00:00 -> (El lunes Zara abre de 10 a 21 horas)
--- 1 -------- 0 --------- 2 ------ 10:00:00 ----- 21:00:00 -> (El martes Zara abre de 10 a 21 horas)
--- 2 -------- 1 --------- 1 ------ 10:00:00 ----- 14:00:00 -> (El lunes Pull & bear abre de 10 a 14 horas)
--- 3 -------- 1 --------- 1 ------ 17:30:00 ----- 20:30:00 -> (El lunes Pull & bear abre de 17:30 a 20:30 horas)
--- 4 -------- 1 --------- 2 ------ 10:00:00 ----- 14:00:00 -> (El martes Pull & bear abre de 10 a 14 horas)
--- 5 -------- 1 --------- 2 ------ 17:30:00 ----- 20:30:00 -> (El martes Pull & bear abre de 17:30 a 20:30 horas)

Ahora para consultar si una empresa está abierta en el momento actual, tan solo deberías hacer una consulta muy simple. Por ejemplo estamos visitando tu web el lunes 19 de junio de 2017 a las 12:33 horas y estamos viendo la empresa Zara.

Código PHP:

<?php

$idEmpresa 
0// El ID 0 corresponde a la empresa zara
$fecha = new DateTime(); // Fecha y hora actual 2017-19-06 12:33:15

$SQL =  "
SELECT id FROM empresas_horarios 
    WHERE id_empresa = '" 
$idEmpresa "' AND dia = '" $fecha->format"w" ) . "' AND abre >= '" $fecha->format"H:i:s" ) . "' AND cierra <= '" $fecha->format"H:i:s" ) . "'
"
;

$pHorario $mysqli->query$SQL );
$aHorario $pHorario->fetch_assoc();

if( 
$aHorario"id" ] ) {
    echo 
"La empresa está abierta ahora mismo"// En el caso de la hora actual nos mostraría que la empresa está abierta.
} else {
    echo 
"La empresa está cerrada ahora mismo";
}

?>
Habría que tener en cuenta los festivos y todo eso claro, pero yo haría una tabla así. Si tienes una tabla muy extensa crea los índices apropiados para las consultas que tengas que hacer. Y si tienes muchas más consultas SELECT que INSERTS o UPDATES crea la tabla con el motor MyISAM que optimiza más las consultas del tipo SELECT.

Espero que te de al menos una idea de como hacerlo. Al final no hay nunca una sola forma correcta de hacer las cosas, lo importante es que funcione y no se malgasten recursos.

Un saludo
Muchas gracias lo implementaré de esta forma.
Que amable tomarse el tiempo de crear hasta la consulta, mil gracias!