sql - Fetching complex data using FMDB -
i using sqlite in ios application , using fmdb wrapper. database schema :
create table offer (code text primary key not null, name text); create table offremarket (codeoffer text not null, codemarket text not null, foreign key(codeoffer) references offer(code), foreign key(codemarket) references market(code)); create table market (code text primary key not null, name text);
my model objects :
@interface offer : nsobject @property (nonatomic,copy) nsstring *code; @property (nonatomic,copy) nsstring *name; @property (nonatomic,copy) nsarray *markets; @end @interface offremarket : nsobject @property (nonatomic,copy) nsstring *codeoffer; @property (nonatomic,copy) nsstring *codemarket; @end @interface market : nsobject @property (nonatomic,copy) nsstring *code; @property (nonatomic,copy) nsstring *name; @end
for example fetching offers in database :
- (nsarray *)offers { // open database nsmutablearray *offers = [nsmutablearray new]; fmresultset *resultset = [database executequery:@"select * offer"]; while ([resultset next]){ offer *offer = [offer new]; offer.code = [resultset stringforkey:@"code"]; offer.name = [resultset stringforkey:@"name"]; // markets each offer fmresultset *marketresultset = [database executequery:@"select * offremarket codeoffer = ?",offer.code]; nsmutablearray *offers = [nsmutablearray new]; while ([marketresultset next]) { offremarket *offermarket = [offremarket new]; .... [offers addobject:offermarket]; } market.offers = [offers copy]; } return [offers copy] }
this working takes time because using many sql requests fetch offers , corresponding markets.
can avoid many sql
requests fetch offers corresponding markets? answers
what can suggest is:
refine sql statement. instead of 2 loops, can change statement "
select * offremarket codeoffer in (select code offer)
". if want use column "name
" in table "offer
", can join 2 tables "codeoffer
" , "offer
". rule of thumb here avoid many loops try combine or refine sql statement.create index column "
code
" in table "offer
". speed searching lot. example, once in 1 of project, had work on sql table 36k records. simple index set primary key column, managed reduce searching time on table 10 seconds.
Comments
Post a Comment