Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: pytanie o daty
Forum PHP.pl > Forum > PHP
b2n
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
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
b2n
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
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
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
b2n
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
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
b2n
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
  1. <?php
  2.  
  3. $sql=&#092;"select distinct sz.ID from szkola sz, strefa s, daty d 
  4. where sz.id_strefa = s.id and d.id_strefa=s.id and '$today'>=d.data1 and '$today'<=d.data2&#092;" ;
  5.  
  6. ?>
$today to data któa cię interesuje

a tak na marginesie ja też mam na imię Robert biggrin.gif
b2n
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
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:
  1. <?php
  2.  
  3. $sql=&#092;"select distinct sz.id from szkola sz, daty d 
  4. where d.id_szkola=sz.id and '$today'>=d.data_pocz and '$today'<=d.data_koniec&#092;";
  5.  
  6. ?>
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.