milos_r
Slavan
- Učlanjen(a)
- 31.10.2004
- Poruke
- 487
- Poena
- 319
Pozdrav, zanima me kako da implemetiram malo kompleksniju pretragu za nekoliko tabela koje imam.
Da ne bih sada ovde kacio one prave nakacicu primer koji se podudara. U pitanju su tri povezane tabele a ja zelim da imam pretragu iz moje aplikacije koja je kumulativna. U smislu u zavisnosti sta korisnik izabere od opcija da se prema tome formia sql upit dinamicki koji cu ja da prosledim bazi i popunim dataset.
Evo prvo koda za neku malu bazicu sa tri tabele:
Sad ja bih mogao da napravim to u programskom kodu preko milion if-ova i slaganjem stringova tipa napravim osnovni string koji prikazuje sve podatke:
pa posle slazem ako korisnik tipa izabere da se prikazuju samo podaci gde je ovaj int veci od necega:
i tako da dodajem u kodu imao bih jedno 500 linija koda u slaganju sql-a. o performansama takvog koda ne bih trosio reci.
Dakle mene interesuje ima li neki laksi nacin da resim ovo da dinamicki slazem ovaj sql upit koji mi je potreban.
Hvala unapred na odgovorima.
Milos
Da ne bih sada ovde kacio one prave nakacicu primer koji se podudara. U pitanju su tri povezane tabele a ja zelim da imam pretragu iz moje aplikacije koja je kumulativna. U smislu u zavisnosti sta korisnik izabere od opcija da se prema tome formia sql upit dinamicki koji cu ja da prosledim bazi i popunim dataset.
Evo prvo koda za neku malu bazicu sa tri tabele:
Kod:
/*==============================================================*/
/* Table: GLAVNATABELA */
/*==============================================================*/
create table GLAVNATABELA
(
ID int not null,
ATTRIBUTE_1 int,
ATTRIBUTE_2 varchar(20),
ATTRIBUTE_3 date,
primary key (ID)
);
/*==============================================================*/
/* Table: TABELA2 */
/*==============================================================*/
create table TABELA2
(
TABELA2ID int not null,
ID int,
ATTRIBUTE_21 int,
primary key (TABELA2ID)
);
/*==============================================================*/
/* Table: TABELA3 */
/*==============================================================*/
create table TABELA3
(
TABELA3ID int not null,
ID int,
ATTRIBUTE_31 int,
primary key (TABELA3ID)
);
alter table TABELA2 add constraint FK_RELATIONSHIP_1 foreign key (ID)
references GLAVNATABELA (ID) on delete restrict on update restrict;
alter table TABELA3 add constraint FK_RELATIONSHIP_2 foreign key (ID)
references GLAVNATABELA (ID) on delete restrict on update restrict;
Sad ja bih mogao da napravim to u programskom kodu preko milion if-ova i slaganjem stringova tipa napravim osnovni string koji prikazuje sve podatke:
Kod:
string sql = "SELECT DISTINCT GLAVNATABELA.ID, GLAVNATABELA.ATTRIBUTE_1, GLAVNATABELA.ATTRIBUTE_2, GLAVNATABELA.ATTRIBUTE_3 FROM GLAVNATABELA LEFT OUTER JOIN TABELA2 ON GLAVNATABELA.ID = TABELA2.ID LEFT OUTER JOIN TABELA3 ON GLAVNATABELA.ID = TABELA3.ID";
pa posle slazem ako korisnik tipa izabere da se prikazuju samo podaci gde je ovaj int veci od necega:
Kod:
if(izabran filter1){
sql += " WHERE GLAVNATABELA.ATTRIBUTE_1 >= [nekaVrednost]"
if(izabran filter2){
sql += " and TABELA3.ATTRIBUTE_31 is not null"
}
}
Dakle mene interesuje ima li neki laksi nacin da resim ovo da dinamicki slazem ovaj sql upit koji mi je potreban.
Hvala unapred na odgovorima.
Milos
Prilozi
Poslednja izmena: