cabana
15.07.2011, 21:52:47
Witam.
Mam w tabeli SQL dwie kolumny START i KONIEC
w START jest zapisana godzina rozpoczęcia akcji przykładowo '17:45'
a w KONIEC jest zapisana godzina zakończenia akcji przykładowo '21:15'
obie kolumny są typu `varchar`.
Gdy użytkownik dodaje swoją akcje np. START o '18:20' i KONIEC o '19:10' chciałbym sprawdzić czy jego przedział czasowy nie jest już zarezerwowany.
Nie mam zielonego pojęcia jak się za to zabrać, próbowałem z BETWEEN i z sprawdzaniem większości i mniejszości.
Przekopywałem również google ale bez żadnych rezultatów.
Proszę o pomoc z napisaniu zapytania.
Z góry dzięki.
P.S
Każdy kto udzieli sensownej odpowiedzi w moim temacie dostanie ode mnie `+`.
peter13135
15.07.2011, 21:57:58
datę/godzin,e nie zapisuj jako varchar, tylko jako TIME, lub date, lub datetime lub uniksowy znacznik czasu (integer zwracany przez php - time() lub mysql - now() )
cabana
15.07.2011, 22:00:59
No dobrze.
Tylko jak w takim wypadku sprawdzić czy dany przedział czasowy nie jest zarezerwowany?
Anomim
15.07.2011, 22:09:29
Uniksowy znacznik czasu jest liczbą, może użyj operatorów < i >
YaQzi
15.07.2011, 22:11:36
a nie można po prostu:
SELECT COUNT(*) AS jest
FROM tabela
WHERE KONIEC > $StartIn
OR START < $KoniecIn
?
Jak będzie zero to jest git. Jak nie to się nakłada.
@edit, machnąłem się w kierunkach nierówności
peter13135
15.07.2011, 22:13:17
select count(id) from tabelA WHERE ( (START between 18:20 AND 19:10) OR (KONIEC between 18:20 AND 19:10) ) OR ( START <18:10 AND koniec > 19:20 )
zobacz czy zadziała
cabana
15.07.2011, 22:15:15
Wszystko fajnie.
Tylko jest jeszcze kwestia jak zapisać timestamp w bazie jeśli na stronie mam coś na wzór ramówki.
Przykładowo użytkownik wybiera sobie dzień na przykład Wtorek i dodaje swoją akcję.
I trzeba to zapisać w timestamp a timestamp zawiera rok, miesiąc, dzień, godzinę, minute i sekundę.
peter13135
15.07.2011, 22:18:24
cabana
15.07.2011, 22:27:30
Cytat(peter13135 @ 15.07.2011, 23:13:17 )

select count(id) from tabelA WHERE ( (START between 18:20 AND 19:10) OR (KONIEC between 18:20 AND 19:10) ) OR ( START <18:10 AND koniec > 19:20 )
zobacz czy zadziała
Twoje zapytanie w każdym wypadku zwraca true czyli, że każdy przedział czasowy jest zarezerwowany.
Cytat(peter13135 @ 15.07.2011, 23:18:24 )

tyle to ja wiem
peter13135
15.07.2011, 22:33:08
1. Aktualnie na moim netbooku nie mam moliwości sprawdzenia czy kod działa, ale nie wiem jak to się stało że count zwraca typ boolean. Jeśli nikt nie rozwiąże Twojego problemu, jutro zobaczę jak to działa.
2. to w czym problem ?
cabana
15.07.2011, 22:39:31
W tym problem, że dzisiaj mamy Piątek 2011-07-15
musiał bym sprawdzać jaki dziś jest dzień i data aby jakoś sprawdzić jaka data będzie we Wtorek
Cytat(peter13135 @ 15.07.2011, 23:33:08 )

1. Aktualnie na moim netbooku nie mam moliwości sprawdzenia czy kod działa, ale nie wiem jak to się stało że count zwraca typ boolean. Jeśli nikt nie rozwiąże Twojego problemu, jutro zobaczę jak to działa.
2. to w czym problem ?
Ad 1. Nie zwraca boolean tylko ja sobie sprawdzam ifem czy jest jakiś rekord jeśli tak zwracam true jeśli nie to false
peter13135
15.07.2011, 22:44:58
date('w') - to Ci zwróci dzień tygodnia (0 - niedziela, 1 - poniedziałek itd.)
edit://
moje zapytanie w każdym wypadku zwróci 1 rekord
cabana
15.07.2011, 22:50:32
Cytat(peter13135 @ 15.07.2011, 23:44:58 )

date('w') - to Ci zwróci dzień tygodnia (0 - niedziela, 1 - poniedziałek itd.)
edit://
moje zapytanie w każdym wypadku zwróci 1 rekord

no dobrze tylko w jaki sposób sprawdzić jaka data będzie we wtorek jeśli dziś mamy piątek?
peter13135
15.07.2011, 22:57:20
jako drugi parametr podaj znacznik czasu interesującego cie dnia.
edit://
chyba źle Ci napisałem.
musisz obliczyć różnicę między dzisiaj i wtorkiem, chyba z tym sobie poradzisz, wtorek według date('w') to 2, piątek to 5
no i potem dodaj do time() liczbę sekund odpowiadającą tej różnicy dni i wrzuć to jako drugi parametr date
cabana
15.07.2011, 23:02:14
chyba sobie odpuszczę to sprawdzanie, ponieważ nie mam pojęcia jak to zrobić

edit:
coś w ten deseń napisałem aby sprawdzić jaka data będzie w dany dzień
<?php
if ($dz == 0)
{
$pon = 1;
$wt = 2;
$sr = 3;
$cz = 4;
$pt = 5;
$so = 6;
$nd = 0;
}
if ($dz == 1)
{
$pon = 0;
$wt = 1;
$sr = 2;
$cz = 3;
$pt = 4;
$so = 5;
$nd = 6;
}
if ($dz == 3)
{
$pon = 6;
$wt = 0;
$sr = 1;
$cz = 2;
$pt = 3;
$so = 4;
$nd = 5;
}
if ($dz == 4)
{
$pon = 5;
$wt = 6;
$sr = 0;
$cz = 1;
$pt = 2;
$so = 3;
$nd = 4;
}
if ($dz == 5)
{
$pon = 3;
$wt = 4;
$sr = 5;
$cz = 6;
$pt = 0;
$so = 1;
$nd = 2;
}
if ($dz == 6)
{
$pon = 2;
$wt = 3;
$sr = 4;
$cz = 5;
$pt = 6;
$so = 0;
$nd = 1;
}
$add = 60 * 60 * 24 * $wt;
$d = $dl + $add;
?>
trochę długie ale działa
peter13135
15.07.2011, 23:22:00
else
tu masz różnice w dniach ale na wszelki wypadek sprawdź czy dobrze działa ten kod, bo już średnio myślę i nie mam jak sprawdzić.
echo date('Y-m-d H:i:s', time()+60*60*24*$roznica)
to ci powinno wyswietlic date jaka bedzie o we wtorek o tej samej porze co teraz (teraz - chwila odpalenia skryptu)
cabana
15.07.2011, 23:56:00
jednak sobie odpuszczę

dzięki za wszelką pomoc
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.