Mam takowe pytanie mamy pole w bazie które wygląda następująco:
01.09.2005|02.02.2006|12.02.2006|22.06.2006
i teraz tak pierwsze dwie daty to jakby jeden przedział a drugie dwie to kolejny przedziałów moze byc jakis 4 max
i teraz chodzi o to ze jak sprawdzic czy dana data np. 05.10.2005 miesci sie w którymś z przedziałów oczywiscie jesli sie nie miesci to zwraca FALSE
szukałem ale nie moglem zlaleźć odpowiedniego pomysłu będę wdzieczny za rade
nospor
3.08.2005, 11:08:56
Oj, ja bym ci propnowal to jedno pole rozbić na cztery. W każdym polu bylaby jedna data. Wtedy bez żadnych kombinacji alpejskich dałoby się wyprodukować interesujące cie zapytanie
tak też brałem to pod uwage ale wtedy jesli przedziałów bedzie 4 a jak bedzie nagle trzeba 5 a jak bedzie to tak to mozna spokojniej chyba ?
bardzo bym prosił o jakis pomysł przy tym rozwiązaniu no chyba że uwazacie ze naprawde lepiej bedzie zrobic np 10 pól na takie daty i tedy 5 przedziałów mozna max
kszychu
3.08.2005, 11:14:29
Dodaj drugą tabelę przedziały z polami: id_pola_z_tabeli_glownej, przedzial_od, przedzial_do.
I wtedy możesz mieć dowolną ilość wpisów z przedziałami dla , np. id = 3.
nospor
3.08.2005, 11:15:59
To skoro liczba przedialow moze byc rożna danego rekordu to propunuję ci taką strukturę:
Cytat
tabela1
---------
id - id rekordu
inne dane - pozostale dane
tabela2
--------
id_tabela1 - klucz obcy do tabela1
data1 - pocztek przedzialu
data2 - koniec przedialu
w ten sposob jesli jakis rekord z tabela1 ma miec przedzialy, to dodajesz te przedaily do tabela2 dodając równiez id z tabela1 dzieki czemu bedziesz wiedzial jaki przedzial jest do jakiego reekordu z tabela1. w ten sposób możesz dawać dowolną liczbę przedzialow
edit: @kszychu byles szybszy, ale nia kasuje mojego bo jest bardziej opisany
to moze od drugiej strony w tej chwili jest tak
1. tabela szkoły do której jest dopsiane jakies ID z tabeli strafa
2. w tabeili strefa sa pola ID | WOJEWÓDZTWO | DATY
gdzie id z tabeli strefa jest zapisaene w kolumnie strefa w tabeli szkoły
Strefy to semestry i teraz jakaś szkoła moze miec 3 semstry a inna moze miec 2 semestry i to w róznych przedziałach czasowych i po podaniu daty "dzisiejszej" chodzi o sprawdzenie czy któraś strafa jest w tym przedziale.
Ew. jak waszym zdaniem to zaprojektowac efektywnie
Robert
ps. no jakos moja wypowiedz poszła pod wszystkimi w tym samym czasie pisalismy
nospor
3.08.2005, 11:26:00
zaprojketować tak jak mowilismy:
Cytat
strefa
---------
id - id rekordu
inne dane - pozostale dane
daty
--------
id_strefa - klucz obcy do strefa
data1 - pocztek przedzialu
data2 - koniec przedialu
oki więc hipotetycznie zakładając że moja tabela wyglada tak jak zaporoponowales
wyciagamy np pierwszy rekod z bazy i dwie daty
1.09.2005 02.02.2006 // to jest jakis tam rekord
i teraz mamy 05.10.2005 //data dzisiejsza
hmm i szczerze powiem nie wiem jak to "ugrźć" i sprawdzić czy ta dziesiejsza data miesci się miedzy tą i tą ;-)
Robert
nospor
3.08.2005, 11:36:12
<?php
$sql=\"select distinct sz.ID from szkola sz, strefa s, daty d
where sz.id_strefa = s.id and d.id_strefa=s.id and '$today'>=d.data1 and '$today'<=d.data2\" ;
?>
$today to data któa cię interesuje
a tak na marginesie ja też mam na imię Robert
czyli dekakto musze miec w tym wypadku 3 tabele
1. szkoły z kolumna - strafa
2. strefy i z kolmna id która odnosi sie do szkoly.strefa
3. datay i gdzie mam kolumne powiedzmy strefa które odnosi się do strefa.id
to tak chyba duzo tego ? my sie wydaje
Robert
nospor
3.08.2005, 11:51:28
w zasadzie to tabela strewfa jest nieporzebna. Tabela daty może odwolywac sie bezposrednio do szkola. Zaraz wytsle ci info na gg to możę to dopracujemy. odbierz. w tej chwili jests nie dostewpny
edit (dla potomnych)
po dlugich i zażartych dyskusjach na gg ustaliliśmy taką oto strukturę:
Cytat
tabela szkola
-----------------
id
inne dane
tabela daty
---------
id_szkola
data_pocz
data_koniec
zapytanie:
<?php
$sql=\"select distinct sz.id from szkola sz, daty d
where d.id_szkola=sz.id and '$today'>=d.data_pocz and '$today'<=d.data_koniec\";
?>
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.