[ mika @ 19.06.2007. 14:30 ] @
Ehm, pozdrav svima, imam jedan problemčić koji bih sa vama da podelim.

Potrebno je da (koristeći bazu podataka) izlistam datume (u određenom formatu: "dan.mesec.") počev od današnjeg dana pa X dana unazad.

Npr. SQL upit za sedam dana glasi:

Code:

select date_format(now(), "%e.%c.") union
select date_format(now()-interval 1 day, "%e.%c.") union
select date_format(now()-interval 2 day, "%e.%c.") union
select date_format(now()-interval 3 day, "%e.%c.") union
select date_format(now()-interval 4 day, "%e.%c.") union
select date_format(now()-interval 5 day, "%e.%c.") union
select date_format(now()-interval 6 day, "%e.%c.") 



E sad, postavlja se pitanje: kako generalizovati gornji kod, da mogu izlistati i 100 dana i 5 dana i bilo koliko? Da li je potrebno praviti stored funkciju/proceduru (nemam prevelikog iskustva s njima) ili je dovoljno napraviti neki malo komplikovaniji query, sa uslovom: ".... WHERE date between NOW() and NOW()-INTERVAL 7 days ... ".

Svaka pomoć, smernica, je dobrodošla! 10x unapred!
[ 357_97 @ 21.06.2007. 20:26 ] @
Da nebi komplikovali mnogo probaj mozda da ovo stavis u jednu petlju pa da sve to onda upakujes u neku funkciju ako cesto pozivas isti kod:
Code:
function izlaz($dani) {
    $upit = 'select date_format(now(), "%e.%c.") union ';
    for($i=1; $i<=$dani; $i++) {
        $upit.= 'select date_format(now()-interval' + $i + ' day, "%e.%c.")';
        if ($i!=$dani) $upit.= 'union';
    }
    return $upit;
}

ili ako nije potrebno resenje preko mysql-a probaj sa
Code:
for ($i=1; $i<=5; $i++) {
    echo date('j.n.',time()-24*60*60*$i);
}
[ Dejan Topalovic @ 22.06.2007. 23:16 ] @
1. Kreiras "pomocnu" tabelu sa brojevima:
Code:
CREATE TABLE dummy_numbers(
  num mediumint(8) not null auto_increment primary key);

i popunis ju brojevima do neke maksimalne vrijednosti, do koje ocekujes da ces imati datume...
Code:
mysql> select max(num) from dummy_numbers;
+----------+
| max(num) |
+----------+
|      100 |
+----------+
1 row in set (0.00 sec)


Za punjenje te tabele mozes koristiti ili proceduru ili neki prog. jezik ili LOAD i sl.

2. Npr. zelis ispisati datume za 15 dana:
Code:

set @koliko := 15;
select date_format(sub1.datum, "%e.%c.") as datum
from (select now() - interval dm.num day as datum
        from dummy_numbers dm
       where dm.num <= @koliko
      order by datum
     ) as sub1;


Nema na cemu.