Liczba w przedziale liczbowym PHP + MySQL |
Liczba w przedziale liczbowym PHP + MySQL |
30.04.2015, 10:32:46
Post
#1
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 2.03.2015 Ostrzeżenie: (0%) |
Witajcie, mam problem z którym walczę już drugi dzień.
Piszę skrypt w php z wykorzystaniem MySQLa, używam PDO. W bazie danych mam następujący układ ID | Nazwa | od | do | grupa ---------------------------------------- 1 Adam 2 5 A 2 Marcin 7 9 B 3 Tomek 13 20 B I teraz formularz w PHP wygląda następująco: [imie] [od] [do] I teraz warunkiem wpisu do bazy danych jest to że od i do nie może być w przedziale i w grupie. Tzn. można przyjąć że te od i do jest godziną. Czyli jeżeli ktoś zarezerwował miejsce w grupie B od godziny 7 do 9 to teraz kolejna osoba nie może zarezerwować tego miejsca w tych godzinach. Kombinowałem z BETWEEN ale niestety nic z tego, nie mam pojęcia jak to ugryźć. Jedna z próbek kodu:
Nie liczę na gotowe rozwiązanie, ale fanie byłoby gdyby ktoś mnie nakierował na odpowiednią ścieżkę. |
|
|
30.04.2015, 10:53:28
Post
#2
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 30 Dołączył: 22.01.2007 Ostrzeżenie: (0%) |
$rezerwacja_od
$rezerwacj_do SELECT * FROM rezerwacja WHERE (rezerwacja.od <= $rezerwacja_od && rezerwacja.do <= $rezerwacja_od) || (rezerwacja.od <= $rezerwacja_do && rezerwacja.do <= $rezerwacja_do) jeżeli zwróci rekord znaczy że czas się gryzie, można użyć funkcji z bazy danych aby to skompresować jeszcze, napisane prosto dla zrozumienia Pozdrawiam |
|
|
30.04.2015, 10:55:16
Post
#3
|
|
Grupa: Zarejestrowani Postów: 33 Pomógł: 2 Dołączył: 28.02.2009 Ostrzeżenie: (10%) |
Źle napisane zostało zapytanie, jak pewnie się domyśliłeś. Powinno być coś w stylu:
Pozwoliłem sobie zmienić spójnik na "i", ponieważ oba warunki winny być spełnione, a także dodałem parametr związany z "do", ponieważ nie sprawdzałeś go. Nie zapomnij dodać kolejnego "bindValue" dla parametru do. |
|
|
30.04.2015, 11:10:52
Post
#4
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 2.03.2015 Ostrzeżenie: (0%) |
$rezerwacja_od $rezerwacj_do SELECT * FROM rezerwacja WHERE (rezerwacja.od <= $rezerwacja_od && rezerwacja.do <= $rezerwacja_od) || (rezerwacja.od <= $rezerwacja_do && rezerwacja.do <= $rezerwacja_do) jeżeli zwróci rekord znaczy że czas się gryzie, można użyć funkcji z bazy danych aby to skompresować jeszcze, napisane prosto dla zrozumienia Pozdrawiam Przerobiłem to na swoje, niestety dalej wszystkie godziny się dodają, przedziały na siebie nachodzą. Tak wygląda mój kod:
Źle napisane zostało zapytanie, jak pewnie się domyśliłeś. Powinno być coś w stylu:
Pozwoliłem sobie zmienić spójnik na "i", ponieważ oba warunki winny być spełnione, a także dodałem parametr związany z "do", ponieważ nie sprawdzałeś go. Nie zapomnij dodać kolejnego "bindValue" dla parametru do. Też tak próbowałem, niestety nic z tego.
Ten post edytował startCode 30.04.2015, 11:14:32 |
|
|
30.04.2015, 11:14:47
Post
#5
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
masz sprawdzić czy:
- od < b_od I do < b_od LUB - od > b_do I do > b_do |
|
|
30.04.2015, 11:19:58
Post
#6
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 2.03.2015 Ostrzeżenie: (0%) |
masz sprawdzić czy: - od < b_od I do < b_od LUB - od > b_do I do > b_do Fajnie, tylko że te warunki sprawiają że mogę dodać tylko jeden przedział. TZn. np. od 10 - 20 , jeżeli chce zrobić od 21-23 to już niestety nie jest to możliwe. Ale tutaj popchnąłeś mnie na kolejne myśli, będę kombinował dalej, może coś z tego wyjdzie. DZięki |
|
|
30.04.2015, 11:28:48
Post
#7
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Nie, te warunki sprawdzają czy którakolwiek godzina nie zawiera się już w istniejącym przedziale. (Przedziały nie nachodzą na siebie)
Więc jeśli dodasz <= i >= to mając przedział 10-12 możesz dodać np. 7-10 i 12-13 PS. b_od i b_do to wartości z BD Ten post edytował Pyton_000 30.04.2015, 11:29:11 |
|
|
30.04.2015, 11:37:33
Post
#8
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 2.03.2015 Ostrzeżenie: (0%) |
Tak, tak, wiem, domyśliłem się.
Zamieniłem to na bindy z bazy danych, sprawdzałem kilka razy. I teraz jeżeli w tabeli rezerwacja nie mam żadnych danych to moge zarezerwować, ale jak zarezerwuję powiedzmy od 10-15 to już nie moge dokonać żadnej rezerwacji, czy to 17-20 czy też 20-23 czy też 1-9. |
|
|
30.04.2015, 11:44:17
Post
#9
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
pokaż zapytanie
|
|
|
30.04.2015, 11:46:49
Post
#10
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 2.03.2015 Ostrzeżenie: (0%) |
|
|
|
30.04.2015, 12:06:16
Post
#11
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 30 Dołączył: 22.01.2007 Ostrzeżenie: (0%) |
popraw na
wczesniej pomyliłem znaczniki mniejszy większy |
|
|
30.04.2015, 12:11:23
Post
#12
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 2.03.2015 Ostrzeżenie: (0%) |
Też nie działa, rezerwuje wszystko wszędzie
Ale przed chwilą rozpisałem sobie cały wykres na kartce, przeanalizowałem, i wyszło że takie coś będzie działało:
i działa! Ale i tak bardzo dziękuję wszystkim za pomoc! Po raz kolejny rzuciliście się na ratunek. Pozdrawiam Ten post edytował startCode 30.04.2015, 12:19:12 |
|
|
Wersja Lo-Fi | Aktualny czas: 26.04.2024 - 04:35 |