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

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -