[ tokajac @ 28.01.2011. 16:33 ] @
Zdravo,


Kako da SELECTujem brojeve od 0 do neke gornje granice? Naprimer 5. Zasada mi stoji
Code:

select 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 5


Treba mi genericni upit u koji cu samo proslediti gornju granicu
Kako se ovo radi?


Pozdrav!
[ bogdan.kecman @ 28.01.2011. 17:21 ] @
zasto?
[ biske86 @ 28.01.2011. 17:35 ] @
Da ti ne trebaju redni brojevi ispred kolona koje selektuješ?

Ako ti to treba onda ide ovako:

Code (sql):

SET @broj=0;
SELECT @broj:=@broj +1 AS RedniBroj, Kolona1, Kolona2
FROM tabela;
 
[ tokajac @ 28.01.2011. 17:36 ] @
Gradim Jasper report sa glavnim i subreportom;

Glavni report je baziran na upitu koji ce generisati trazeni niz ciju maximalnu vrednost odredjujem:
Code:
SELECT ROUND( DATEDIFF(max(date_of_service),min(date_of_service))/30 ) AS noOfIntervals
 FROM invoices
  WHERE date_of_service IS NOT null


vrednosti niza prosledjujem kao parametre u subreport (vidi "promenjiva" na 2 mesta)

Code:
SELECT date_of_service, balance
 FROM invoices
  WHERE balance IS NOT null
 AND date_of_service BETWEEN DATE_SUB( NOW(), INTERVAL promenjiva*30 day ) AND DATE_SUB( NOW(), INTERVAL promenjiva-1*30 day )


Ovaj koncept radi ono sto zelim ali treba genericki da napravim taj niz putem SQL upita u main reportu.

Kako da generisem navedeni niz u MySQL? Ne deluje komplikovano ali se jos nisam snasao?
Da li ima boljih ideja ako je neko spreman da se udubi u kompletan problem?


Pozdrav!
[ biske86 @ 28.01.2011. 17:59 ] @
Da ti ne treba možda ovo?
http://dev.mysql.com/doc/refma...yntax-prepared-statements.html
[ tokajac @ 28.01.2011. 18:06 ] @
Hvala na odgovorima ali problem jos nije resen

Citat:
biske86: Da ti ne trebaju redni brojevi ispred kolona koje selektuješ?

Ako ti to treba onda ide ovako:

Code (sql):

SET @broj=0;
SELECT @broj:=@broj +1 AS RedniBroj, Kolona1, Kolona2
FROM tabela;
 


RedniBroj u prvoj koloni je uvek null? Jel ovo treba da radi u MySQL Query browseru, Execute sql ili treba jos nesto?
Kako da primenim Prepared statements/Stored Procedure na ovaj problem?

Da li ima jos ideja?
Dakle, 'samo' bi mi treba niz celih brojeva kojem proizvoljno mogu da dodelim gornju granicu. Ostalo radi


Pozdrav!
[ bogdan.kecman @ 28.01.2011. 18:09 ] @
[digresija]
ja sam za zivota koristio mnogo razlicith reporting alata i *NIJEDAN* mi nije zahtevao da se ceo report generise iz "jednog sql-a" ... doduse nisam probao jasper .. no ovo je treci ili cetvrti post gde "neko" ima problem sa ovim jasperom da mora da izgenerise SQL koji ce da napravi ceo report ... ja iskreno mislim da vi ne znate da koristite taj jasper posto mi je neverovatno da jedan sistem za report ima takav zahtev .. no posto je to windoze tool za windoze usere - sve je moguce ... tako da proverite da li doticni jasper ima nacin da se u njemu napise skripta za generisanje reporta gde mozes da napravis petlju, pozoves 200 upita ako ti treba i slicno .. Ja cu svakako probati da pomognem uvek oko SQL-a koliko je to moguce, ali nekada stvarno trazite previse od SQL-a :D .. to je ipak samo jezik za upite ...
[/digresija]

elem .. vezano za pitanje ..

mysql nema FOR petlju u SQL-u tako da to nece ici ... ono sto mozes je da nekom stored procedurom napunis neku temporary tabelu pa da koristis nju ili da koristis neku "foru" tipa da radis selekt iz neke tabele koja znas da ima vise kolona nego ti treba pa uradis nesto tipa:

Code:

mysql> set @a=0; select @a:=@a+1 as nekibroj from INFORMATION_SCHEMA.COLUMNS limit 10;
Query OK, 0 rows affected (0.00 sec)

+----------+
| nekibroj |
+----------+
|        1 |
|        2 |
|        3 |
|        4 |
|        5 |
|        6 |
|        7 |
|        8 |
|        9 |
|       10 |
+----------+
10 rows in set (0.02 sec)


mada je malo trulo resenje ... bolje pronadji kako se skriptuje taj jasper

[ bogdan.kecman @ 28.01.2011. 18:21 ] @
Citat:
tokajac
RedniBroj u prvoj koloni je uvek null?


zato sto si set @RedniBroj = 0; odradio u jednoj konekciji a select .. u drugoj... a vrednost vazi samo tokom jedne sesije .. query browser svaki put napravi novu konekciju ...

ako uzmes workbench i koristis njegov query prozor onda bi on trebalo da radi sve kroz jednu konekciju (jedan query tab - jedna konekcija) - bar tako radi kod mene ne secam se dal sam ga nesto posebno konfigurisao .. u svakom slucaju iz tvoje aplikacije, dokle god si unutar jedne sesije (konekcije) ta varijabla je validna .. dakle moze 2 uzastopna sql.execute bitno je samo da su u istoj konekciji
[ tokajac @ 29.01.2011. 11:21 ] @
Proradilo:


Dodao sam jos jedan subreport na pocetak, tako da sad imam 3 sloja:
1) Odredjujem gornju granicu;
2) SELECTujem sa LIMIT gornja granica. U mom sluaju sam bezbedan posto ce records-a uvek biti dovoljno;
3) Jasper zaista ima counter :) koji prati broj records-a. Ako nekom bude potrebno sledeca svojstva treba podesiti za varijablu:
Code:
counterVar, java.lang.Integer, Nothing, Report, None, new Integer(V{counterVar}+1), new Integer(0)



Hvala na super smernicama, Momci! Pozdrav!
[ biske86 @ 29.01.2011. 14:17 ] @
Citat:
bogdan.kecman: zato sto si set @RedniBroj = 0; odradio u jednoj konekciji a select .. u drugoj... a vrednost vazi samo tokom jedne sesije .. query browser svaki put napravi novu konekciju ...

ako uzmes workbench i koristis njegov query prozor onda bi on trebalo da radi sve kroz jednu konekciju (jedan query tab - jedna konekcija) - bar tako radi kod mene ne secam se dal sam ga nesto posebno konfigurisao .. u svakom slucaju iz tvoje aplikacije, dokle god si unutar jedne sesije (konekcije) ta varijabla je validna .. dakle moze 2 uzastopna sql.execute bitno je samo da su u istoj konekciji


Ja nisam lepo objasnio, misliio sam da ovo koristim u proceduri, tako da bi bilo u istoj konekciji.


Citat:
tokajac: Proradilo:


Dodao sam jos jedan subreport na pocetak, tako da sad imam 3 sloja:
1) Odredjujem gornju granicu;
2) SELECTujem sa LIMIT gornja granica. U mom sluaju sam bezbedan posto ce records-a uvek biti dovoljno;
3) Jasper zaista ima counter :) koji prati broj records-a. Ako nekom bude potrebno sledeca svojstva treba podesiti za varijablu:
Code:
counterVar, java.lang.Integer, Nothing, Report, None, new Integer(V{counterVar}+1), new Integer(0)



Hvala na super smernicama, Momci! Pozdrav!


Super što je proradilo..
[ bogdan.kecman @ 29.01.2011. 18:31 ] @
ivane ti si super objasnio nego njemu nije radilo posto je terao iz qb-a koji svaki posalje u zasebnoj sesiji

tokajac, mani se qb-a i predji na wb :)
[ biske86 @ 29.01.2011. 19:13 ] @
Ja sad koristim Workbench i čini mi se da je dobar alat. Ima mana, nije savršen, ali odrađuje posao. Mada nemam baš neke prevelike zamerke ali ostaje neki čudan osećaj..Recimo kad sam radio na SQL Developeru na Oracle čini mi se da sam se mnogo bolje osećao, u smislu usuability samog alata..Mislim to je ono što čovek ne zna da objasni, neko osećanje kao da ide sve podmazano. Za ovaj vorkbenč mi se čini da ide ali po malo štuca
[ bogdan.kecman @ 29.01.2011. 21:02 ] @
da, sql developer "klizi" ... jbg WB je ono .not tehnologija .. sta da ti kazem ... mada, usavrsice oni njega :D ... novom gazdi je stalo da ima dobar windoze gui za mysql ..