Jak wyciągnąc dane z tabeli gdzie przeciał czasowy mieści się w zakresie x minut

0

Mam taki problem muszę wyciągnąć dane z tabeli, gdzie przedział czasowy mieści się powiedzmy w x minut i wszsytko jest dobrze, ale jak są np wiziyt od 12:00 do 13:00
Jest liczba minut, która może być zmienna i wszystko wypada dobrze aż do monetu kiedy się tego samego dnia zarejestruje w minucie np na 12:00 i na 14:00 to na 13:00 już nie może jak to zrobić próbowałem czegoś takiego w laravelu.

        $int = $hour2->rename_hour_at_int( $hour);
        $int += $hour2->min * 60;
        $min = $hour2->min;
        $int2 = $int -  $hour2->min * 60;
        $new_date = date("Y-m-d H:i:s",$int);
        $new_date2 = date("Y-m-d H:i:s",$int2);
        $time = date("H:i:s", $hour2->min * 60);
             $count3 = $visit->whereRaw("timeDIFF(date,'$hour')  <= '$00:00:00' ")
                ->whereRaw(" timeDIFF(date,'$new_date') >= '" . $time . "'")
                ->where("doctors_id","=",Input::get("doctor"))->get();
            $count4 = $visit->whereRaw("timeDIFF(date,'$hour')  <= '00:00:00 ")
                ->whereRaw(" timeDIFF(date,'$new_date') >= '" . $time . "'")
                ->where("patients_id","=",Input::get("patients"))->get();

Ale to nic nie daje.

0

No działa w tych przypadkach
np kiedy w bazie mamy
2018-12-23 12:00:00
2018-12-23 14:00:00
2018-12-23 15:00:00

To godzina 16:00:00 zadziała, ale już 13:00:00 nie zadziała.

0

jesteś tutaj od dawna i nie wiesz jak zadać pytanie poprawnie? Dajesz DDL tabel, przykładowe dane i oczekiwany wynik. Jeszcze lepiej jak wrzucisz to na sqlfiddle

0
create table visit {
id int(11) auto_increment,
date datetime,
id_doctor int(11),
id_patients int(11)
};

Przykładowe dane
$min = 60
id_doctor 1
id_pAatients = 2
data = 2019-04-01 12:00:00
Jeżeli podamy takie dane jak id_pacjents = 2 id_doctor = 1 i godzine 2019-04-01 13:00:00 to zapisuje w bazie
Ale jeśli podamy przykładowo 2019-04-01 12:30:00 to nie zapisuje
Możemy również mieć takie dane

id_doctor 1
id_pAatients = 2
data = 2019-04-01 12:00:00
id_doctor 1
id_pAatients = 2
data = 2019-04-01 15:00:00
Jeżli podamy takie dane jak id_pacjents = 2 id_doctor = 1 i godzine 2019-04-01 14:00:00 to ma zapisać w bazie
I jeszcze jeśli chodzi o to doctorid i pacjentsid to tutaj jeśli chodzi pacjent lub lekarza będzie miał w tej godzinie wizytę to nie zapiszę.

0

@pol90: zadajesz pytania w sposób bardzo chaotyczny i niechlujny. Odtwórz sytuację tutaj:
https://www.db-fiddle.com/

Dodaj tabelę, dodaj przykładowe dane oraz zapytanie, które generuje niepożądany wynik.

0

Chodzi o tą funkcje

private function check_if_is_visit_register($hour) {
        $visit = new \App\patients_register();
        $hour2 = new \App\Http\Controllers\hours_of_reception();
        $int = $hour2->rename_hour_at_int( $hour);
        $int += $hour2->min * 60;
        $new_date = date("Y-m-d H:i:s",$int);
        $time = date("H:i:s", $hour2->min * 60);
        
        
        $count = $visit->whereRaw("timeDIFF(date,'$hour')  >= '00:00:00' ")
                ->whereRaw(" timeDIFF(date,'$new_date') <= '" . $time . "'")
                ->where("doctors_id","=",Input::get("doctor"))->get();
        $count2 = $visit->whereRaw("timeDIFF(date,'$hour')  >= '00:00:00' ")
                ->whereRaw(" timeDIFF(date,'$new_date') <= '" . $time . "'")
                ->where("patients_id","=",Input::get("patients"))->get();
        
 
        if ( count($count) == 0 and count($count2) == 0) return true;
        else return false;
 
 
        
    }

I ona sprawdza czy dany pacjent jest zarejestrowany na taką godzinę i ona próbuje wyciągnąć pacjenta albo lekarza o takim id który będzie miał wizytę w godzinie no np. jak ktoś jest zarejestrowany na godzinę 12:00 któregoś dnia no to jak wizyta trwa 60 minut to na 12:50 go nie zarejestruje ale na 13 już tak wszystko działało pięknie ale nie zauważyłem takiego czegoś, że jak danego dnia będą np takie zarestrowania jak 12:00 i 15:00 to zarejestrowanie na 13:00 nic nie da. No już preściej się tego wytłumaczyć nie da.

No np mamy takie dane w tabeli
date id_doctor id_patients
2018-09-09 12:00:00 1 1
2018-09-09 14:00:00 1 1
2018-09-09 17:00:00 1 1

I teraz chcemy, żeby takiego pacjenta id 1 zarejestrować do lekarza o id 1 w godzinie przykładowo 13:30

No to zwróci fałsz ponieważ zapytanie wybierze wpisy w godzinach między 12:00 a 14:00 i teraz jak to obejść.

1

prostytutka tak ci ciężko wrzucić to na sqlfiddle żeby nikt się nie musiał domyślać?? Chcesz pomocy czy nie?

BTW a jak ktoś się bezie chciał zarejestrować na 13:01:00 albo na 13:00:30 albo na 13:45:20? W rezerwacji powinieneś mieć datę od-do i wtedy wiesz, które przedziały są zajęte a które nie

1 użytkowników online, w tym zalogowanych: 0, gości: 1