Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa Noite,
Não estou conseguindo, aliás nem sei se é possível, fazer uma consulta para poder validar a marcação de consulta.
Vou explicar
Tenho as tabelas com a seguinte estruturas:
tabela: espec_horario
espec_horarioID
especialID
diasemanaID
manhainicio
manhatermino
tardeinicio
tardetermino
mediaconsulta
nesta tabela, por excemplo tenho o seguinte registro na ordem acima
1 2
1 2
1 1
08:00:00 00:00:00
12:00:00 00:00:00
14:00:00 15:00:00
19:00:00 18:00:00
estou usando a seguinte sql:->
"SELECT * FROM calendario, espec_horario WHERE calendario.especialID = %s AND calendario.datestart_eve = '$consulta' AND espec_horario.especialID = calendario.especialID "
Aqui eu verifico se existe consulta marcada para o horário - funciona direito se tiver avisa - agora o que eu preciso:
testar o horário que o cliente deseja e ver se o medico atende naquele horário:
exemplo: uma consulta para a especialidade 2 as 08:00 - no meu sql vai constar que não existe a consulta e poderá ser marcada - mas o médico só atende a partir das 15:00 - como fazer este teste direto na sql - é possível?
Com certeza é possível sim.
Mas você terá que ter uma tabela que grave os médicos e seus horários de atendimento
para comparar com o horário que o cliente quer a consulta.
Mas é isso mesmo a tabela é a espec_horario lá eu tenho os horários
por exemplo:
1 -> espec_horarioId
1 -> especialidadeID -> fisioterapia
1 -> diasemanaID -> segunda-feira
08:00:00 -> atende a partir de
12:00:00 -> até as
14:00:00 -> atende no periodo da tarde a partir de
19:00:00 -> ultimo horario
40 -> media consulta em minutos
2 -> espec_horarioID
1 -> especialidadeID -> fisioterapia
2 -> diasemanaID -> terça-feira
00:00:00 -> não atende
00:00:00 -> não atende
15:00:00 -> primeira consulta do dia
18:00:00 -> ultima consulta do dia
40 -> media consulta em minutos
São várias especialidades - 10 no total -
Ok
>
Mas é isso mesmo a tabela é a espec_horario lá eu tenho os horários
por exemplo:
1 -> espec_horarioId
1 -> especialidadeID -> fisioterapia
1 -> diasemanaID -> segunda-feira
08:00:00 -> atende a partir de
12:00:00 -> até as
14:00:00 -> atende no periodo da tarde a partir de
19:00:00 -> ultimo horario
40 -> media consulta em minutos
2 -> espec_horarioID
1 -> especialidadeID -> fisioterapia
2 -> diasemanaID -> terça-feira
00:00:00 -> não atende
00:00:00 -> não atende
15:00:00 -> primeira consulta do dia
18:00:00 -> ultima consulta do dia
40 -> media consulta em minutos
São várias especialidades - 10 no total -
Ok
Ok, e como é sua tabela que grava as consultas marcadas?
A tabela é assim
consultaID -> 1
usuarioID -> 5 -> João das Couves
datestart_eve -> 2012-05-15 08:00:00 -> inicio consulta
dateend_eve -> 2012-05-15 08:40:00 -> termino consulta
especialID -> 1 - Fisioterapia
Nesta SQL
"SELECT * FROM calendario, espec_horario WHERE calendario.especialID = %s AND calendario.datestart_eve = '$consulta' AND espec_horario.especialID = calendario.especialID "
eu já testo para ver se existe consulta para aquele horario falta testar a hora para ver se ele atende naquele horário
outra coisa o horário eu já desmembrei em duas partes - $consulta = 2012-15-05 - e $hora = 08:00:00
Ok
>
A tabela é assim
consultaID -> 1
usuarioID -> 5 -> João das Couves
datestart_eve -> 2012-05-15 08:00:00 -> inicio consulta
dateend_eve -> 2012-05-15 08:40:00 -> termino consulta
especialID -> 1 - Fisioterapia
Nesta SQL
"SELECT * FROM calendario, espec_horario WHERE calendario.especialID = %s AND calendario.datestart_eve = '$consulta' AND espec_horario.especialID = calendario.especialID "
eu já testo para ver se existe consulta para aquele horario falta testar a hora para ver se ele atende naquele horário
outra coisa o horário eu já desmembrei em duas partes - $consulta = 2012-15-05 - e $hora = 08:00:00
Ok
Bom, não sei como está sendo feita as coisas no seu programa,
mas, antes de gravar a consulta você deve testar se o horário e data informada na tela
estão dentro dos dias e horários de atendimento da especialidade escolhida...
Ex, o usuário que marcará a consulta informará estes dados no formulário para consultar:
------------------------------------------------------------------------------------------------------------
Data consulta: 01/05/2012 Especialidade: Fisioterapia
Horário Início consulta: 11:00:00 Horário final: 12:00:00
||Consultar disponibilidade||
------------------------------------------------------------------------------------------------------------
Então primeiro testar se o horário e data informada na tela
está dentro dos dias e horários de atendimento da especialidade escolhida:
SELECT * FROM espec_horario
WHERE diassemanaID = $diaInformadoPeloUsuario AND especialId = $especInformada AND
($horaIniInformada between manhainicio and manhatermino
OR
$horaIniInformada between tardeinicio and tardetermino )
AND
($horaFimInformada between manhainicio and manhatermino
OR
$horaFimInformada between tardeinicio and tardetermino )
Testar se esta consulta acima retornou resultados, se sim, a especialidade atende nesse horário informado
e então fazer uma segunda consulta para verificar se já não há consulta marcada neste horário
Fica mais ou menos assim:
(Fica melhor que voce separe em 3 campos para data Inicio e Hora incio e fim...
datestart_eve , horastar_eve e horaend_eve )
if($atendeNoHorario=true) { //faz a segunda consulta
SELECT * FROM calendario
WHERE datestart_eve = $dataInformadaPeloUsuario AND especialID = $especInformada AND
($horaIniInformada between horastart_eve and horaend_eve
OR
$horaFimInformada between horastart_eve and horaend_eve )
if(retornarDados=true) {
echo "Já há consulta marcada nesse horário";
} else {
echo "ok";
chamaRotinaQueGravaNaTabelaCalendario;
}
}
Seguinnnte colega: A lógica é MAIS OU MENOS essa... mas eu não tenho nada aqui agora pra testar esse código
que eu montei aí... então tem que testar ai e fazer os ajustes. E da pra incrementar muito mais também.
Obrigado pela resposta, fiz uma página de teste apenas para verificar o horário mas não funciona - o SQL não verifica e traz todos os registros
SELECT * FROM espec_horario , especialidades, diadasemana WHERE especialidades.especialID = espec_horario.especialID AND diadasemana.diadasemanaID = espec_horario.diadasemanaID ORDER BY especialidades.especial, diadasemana.nomedia AND ('$hora' BETWEEN espec_horario.manhainicio AND espec_horario.manhatermino OR '$hora' BETWEEN espec_horario.tardeinicio AND espec_horario.tardetermino)
Quando um medico não atende na parte da manhã eu coloco 00:00:00 será que é por isso ?
Vou continuar tentando
Consegui ....
SELECT * FROM diadasemana, espec_horario WHERE espec_horario.diadasemanaID = diadasemana.diadasemanaID AND espec_horario.especialID = %s AND diadasemana.nomedia = '$semana' AND ('$hora' BETWEEN espec_horario.manhainicio AND espec_horario.manhatermino OR '$hora' BETWEEN espec_horario.tardeinicio AND espec_horario.tardetermino
Obrigado a todos
Para lhe ajudar me responde uma dúvida.
Tem mais de um médico para atender?
Qual tipo de campo que você colocou nos horários?
Se existir mais de um médico , ficaria mais fácil você validar na aplicação, se existe marcação e se o médico atende no horário pretendido.
Aguardo resposta.
Att