Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 5 odgovora
  • 2.109 pregleda

Najnovija ↓

Pregled slobodnih datuma 08.07.2019. u 12:16 · pre 89 meseci #1
Pozdrav,

Kreirao sam aplikaciju za rezervaciju događaja i u bazi, pored ostalih polja, imam i datum rezervacije..
Potreban mi je izvještaj slobodnih datuma za određeni dan u sedmici (ponedeljak, utorak...) za određeni period.
Tj. za uneseni period od 01.06.2019. do 30.06.2019. i odabran dan Subota bi recimo trebalo da dobijem da su mi slobodni 15.06.2019 i 22.06.2019, dok su mi 1. 8. i 29. zauzeti..

Imam dvije ideje za rješavanje ovog problema, ali ni jedna mi nije "elegantna"
1. ideja:
Da kreiram tabelu "kalendar" sa poljima "datum" i "dan" i da tu unesem sve datume za narednih 10-20 godina i svakom datumu da dodam koji je dan u sedmici (1-ponedeljak, 2-utorak, .. )
I prilikom pretrage da selektujem sve datume za određeni period koji padaju u selektovan dan i onda ti datumi NOT IN u tabeli "dogadjaji"

2. ideja:
da kreiram for petlju za odabrani period i da idem jedan po jedan dan i provjeravam da li je taj dan recimo "subota" i ako jeste onda provjerava da li postoji nešto sa tim datumom već rezervisano..


Mislim da će prva ideja dosta brže raditi, ali morao bih onda da popunim tabelu kalendar sa bar 10 godina unaprijed..


Najbolje rješenje bi bilo kada bih mogao u jednom upitu da dobijem sve "rupe" u tabeli "dogadjaji" za određeni period i selektovan "dan"

Hvala unaprijed.
Re: Pregled slobodnih datuma 08.07.2019. u 12:55 · pre 89 meseci
izmenjeno 1 put, poslednji put Deunan 08.07.2019. u 13:15
  1. Deunan08.07.2019. u 13:15zapis iz teksta poruke
#2
Mozes da izvuces sve zauzete termine za neki dan u tom periodu, pa ih u kalendaru ugasi:
Code:

SELECT termin, DAYOFWEEK(termin) as dan FROM termini WHERE (termin BETWEEN '2019-01-30' AND '2019-09-29') HAVING dan = 6

U mysql-u datum pocinje od nedelje (1). 6 je, recimo, petak.
Re: Pregled slobodnih datuma 08.07.2019. u 14:57 · pre 89 meseci #3
Ok, ovim upitom mogu da dobijem sve subote koje su zauzete u 6. mjesecu..

Code:
SELECT * FROM dogadjaji WHERE datum>="2019-06-01" AND datum<="2019-06-30" AND DAYOFWEEK(datum)=7


Da li postoji način da bez kreiranja dodatne tabele sa svim datumima i danima u mjesecu dobijem slobodne datume?
Tj. samo na osnovu ove tabele "dogadjaji" da dobijem informaciju o slobodnim terminima?
Re: Pregled slobodnih datuma 08.07.2019. u 15:52 · pre 89 meseci #4
Samo ovako nesto:
Code:

select a.datum
from (
    select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a) ) DAY  as datum
    from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as d
) a LEFT JOIN dogadjaji ON a.datum = dogadjaji.datum
where a.datum between '2019-06-01' and '2019-06-24' and DAYOFWEEK(a.datum)=7 and dogadjaji.datum IS NULL


Nije bas "elegantno", ali radi...

Re: Pregled slobodnih datuma 11.07.2019. u 12:19 · pre 88 meseci #5
@bloker: Prva ideja ti je bila dobra, to je standardno rešenje za mnoge datumske probleme. Datum tabela i to je to.
Re: Pregled slobodnih datuma 12.07.2019. u 14:55 · pre 88 meseci #6
@jablan
Tako sam na kraju i odradio, mislio sam da mysql ima neko elegantnije rješenje bez kreiranja dodatne tabele sa datumima..

@Deunan
Našao sam i ja ovaj upit negdje na internetu, ali iskreno bio mi je nešto komplikovan nisam uspio da skontam kako radi.. tako da sam se vratio prvoj opciji..

Hvala svima na pomoći
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme