Odbrojavanje u SQL-u

Zanima ne koji je najbolji način za odbrojavanje u SQL bazi.
Znači imam neku tablicu u kojoj se nalazi neki broj koji treba predstavljati broj dana koliko taj post treba biti aktivan, sad je pitanje kako to najbolje odraditi da se to odbrojava ili nešto slično.

Sad dal je bolje u 00:00 pokretat skriptu koja će kod svakog pojedinog posta smanjit broj dana za 1 ili kako drugačije? Misilm da ovo odbrojavanje ne bi usporilo rad ako je puno za mijenjat?

a upisat datum do kojeg treba bit aktivan?

Imaš tablicu postovi i u njoj stupac aktivan do.
kod ispisa postova: select from tablica gdje je aktivan_do veći ili jednak sad
kod ispisa pojedinačnog posta: select from tablica where post_id = post_id
u php-u, ako je ako je sad jedank ili veći od aktivan_do, ako je ispiši me, ako nije post više nije aktivan.

To sa datumom sam si i ja mislio samo, jel se može za datum koristiti tako uspoređivanje. I što je onda sa veljačom i sa mjesecima koji imaju 30 i 31 dan.

Jer glupo mi je dati korisniku da odreduje po datumu do kad je post aktivan, ne radi se samo o meni. Dakle onda treba provjeravati dali je datum istekao ( da se ne može odabrati dan koji je već prošo ) i dali mjesec ima 30 ili 31 dan, dal je veljača i ako je prijestupna godina…

Pa si zato razmišljam dal je jednostavnije samo napravit chron job pa neka pokrece skirptu u 00:00 ili se zezat s tim datumima -.-. HeLp :S

U MS SQL Serveru postoji DATEDIFF funkcija koja može računati razliku datuma u danima. Provjeri, možda i MySQL ima nešto slično.

Definitivno NE cron jobu, “zezaj” se s datumima.

Previše si kompliciraš život sve je to već urađeno za tebe, pretpostavljam da radiš s PHP-om evo pa ti funkcija za provjeru datuma
http://php.net/manual/en/function.checkdate.php
, i prije unosa odabranog datuma u bazu provijeriš dali je datum veći od trenutnog i ako je u redu, a ako nije onda lijepo izbaciš poruku koriniku da datum nije moguće koristiti jer je već prošao.

I to je to. Dobar tek.

P.S. Kompliciranjem s cron jobom ćeš si samo zagorčati život, a osim toga opet nećeš moći biti siguran da li je datum koji je korisnik unio veći od trenutnog itd., itd., a osim toga zašto korisnik nebi mogao odrediti do kada je post aktivan.

P.S.S Sad se sjetih možeš na formu umjesto polja za unos datuma staviti i select box “Post vrijedi do” pa staviti vrijednosti npr. 1 dan, 2 dana, 5 dana, 10 dana, mjesec, dva 5 godina, zauvijek. Pa nećeš imati glavobolje oko toga što je korisnik unio u obliku datuma.

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_datediff

  • nadopuna trnčevog posta, ali mislim da je bolje to uraditi i pripremiti sve u kodu nego raditi to u database serveru.

Inače, ovo je toliko trivijalno za uraditi, pa ne znam čemu toliko kompliciranje stvari.

Najjednostavniji pristup bi bio da u tablici imaš polje npr. “expirationDate”. Koje sprema vrijednost “int(10)”.

Prilikom unosa članka (ili kako već radi skripta) preračunaj datum koji korisnik unese u sekunde (unix timestamp) i tu vrijednost spremi u polje “expirationDate”.

Sada, sve što trebaš napraviti je:<span class="syntaxdefault">$sql&nbsp;</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"SELECT&nbsp;filed1,&nbsp;field2,&nbsp;fieldN<br />&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tableName<br />&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;&nbsp;&nbsp;&nbsp;expirationDate&nbsp;>&nbsp;"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">time</span><span class="syntaxkeyword">();&nbsp;</span><span class="syntaxdefault"></span>

Edit: znači u svoj postojeći upit samo dodaš posljednju liniju - “WHERE expirationDate > time()”…

ako oćeš sve rješavat u mysqlu, možeš ovako nešto slat:
SELECT * FROM tableName
WHERE to_days( now( ) ) - to_days( datum ) < 5

to_day pretvara datum u dane koji su prošli od nekog datuma
datum je datum unosa, a ovo 5 (ili koliko ti već treba) je broj dana koliko post treba bit aktivan

Hvala na odgovorima :).

Nego kao što je @CreatifCode rekao, tako sam i mislio stavit, da se unese broj dana.
Samo onda treba to preračunavati i pretvoriti u datum…

A za kompliciranje sam poznat :D, uvijek kompliciram oko jednostavnih stvari jer se ne mogu odlučit.

Sad malo off topic. Dal je tu bolje OOP ili normalne skirpte , mislim za prikaz posta i tih stvari, uključujući postanje slika…

Pitanje:
Da li radiš web-aplikaciju ili web-stranicu?

Odogovori:

a) radim web aplikaciju koju u budućnosti namjeravam nadograđivati, unapređivati itd.
b) radim najobičniju web-stranicu
c) radim web u obliku blogging servisa ili nekakvog foruma

Mogući odgovori na tvoje postavljeno pitanje u zavisnosti od odgovora na tebi postavljeno pitanje:

a) Objektno orijentirani pristup je u ovakim slučajevima skoro pa prirodan način programiranja.
b) Za ovakovu vrstu je napogodnije proceduralno programiranje, jer je sve ostalo overkill
c) U ovom slučaju je najpogodnije odabrati onaj način u kojem se programer osjeća najsigurnije, odnosno najpogodniji način je onaj u kojem programer ima i najviše iskustva.

d) možda iskoristiti i neke od poznatih Design patterna,
http://www.phppatterns.com/docs/?idx=design

Kao što rekoh trivalno za uraditi. Dadoh ti i link evo još jedan:
http://uk2.php.net/manual/en/function.strtotime.php

Okani se toga, to je loša navika pogotovo za jednog programera. Mi smo tu da iznađemo najjednostavnije moguće riješenje zadatog problema, a ne da zadati jednostavan problem pretvorimo u komplicirani nerješivi problem. Kompliciranjem do neizmoglosti trošiš svoje vrijeme, novac, živce i ostale resurse od kojih na kraju neće nitko imati koristi, a ponajmanje ti osobno.

Ok, hvala. Sredit ću sad to sve. A za trošenje vremena samo gledam kao praksu, ne mislim se živcirati bezveze, pa ako ništa drugo od “uzalud” potrošenog vremena se nešto nauči :slight_smile: