05. april 2006 - 12:42Der er
5 kommentarer og 1 løsning
Søgefunktion gennem flere tabeller
Flg. er et eksempel på et query i min søgefunktion:
SELECT p.* FROM cvpersons p JOIN (cvpersonalabilities a, cvlanguages l, cvjobwishes j, cvpresentation t) ON (a.cvid=p.id AND j.cvid=p.id AND t.cvid=p.id AND l.cvid=p.id) WHERE a.abilities LIKE '%Kreativ%' AND j.jobtype LIKE '%fulltime%' GROUP BY p.id LIMIT 10 OFFSET 0
Problemer er, at hvis der ikke er nogen record hvor cvid=p.id i bare een af de tabeller jeg joiner, så får jeg ikke noget resultat. Der skal komme et fx komme et resultat selvom der ikke er nogen record i tabellen med alias 'l' som matcher l.cvid=p.id. Faktisk har jeg fundet frem til at hvis der er to rækker i 'l' som matcher, får jeg to ens resultater.
Hvis en record i cvlanguages ikke peger på den relevante person i cvpersons er der noget galt med strukturen af databasen. Som jeg tror det er; så kan en person tale et eller flere sprog og et sprog kan tales af en eller flere personer. Det vil f. eks. give disse tabeller:
tblPerson PersonID (PK) Fornavn osv
tblSprog SprogID (PK) Sprognavn osv
tblPerson_Sprog PersonID (FK) SprogID (FK) osv
Det er MEGET vigtigt at du får styr på tabellerne og deres relationer INDEN du kommer for langt.
Det er ikke et database problem, det handler om data. Du kan ikke søge på noget som der ikke findes, hvis en person taler spansk men ikke er registreret med dette, er der ikke noget at gøre. :0( Tabel strukturen holder stadig væk. :0)
Find først ud af hvilke punkter databasen skal indeholde. Fordel punkter ud i nogle emner Beskriv hvordan emnerne hænger sammen. Ud fra det kan du så lave tabeller og relationer. Check at tabellerne er på 3 normalform.
Først nu kan du lægge data ind i tabellerne og se om du kan trække dem ud igen på den måde du har tænkt dig.
Ovenfor har jeg skitseret to emner (Person og Sprog) med tilhørende punkter. Emne bliver til tabel og punkter bliver til felter i tabellen. Relationerne skal afspejle virkeligheden: En Person taler et eller flere Sprog Et Sprog tales af en eller flere Personer Relationen melle Person og Sprog er altså mange-til-mange.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.