Avatar billede egeriis Nybegynder
05. april 2006 - 12:42 Der 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.

Håber at modtage lidt hjælp, på forhånd tak :)
Avatar billede ffsoft Praktikant
05. april 2006 - 19:23 #1
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.
Avatar billede egeriis Nybegynder
06. april 2006 - 11:38 #2
Men problemet er at en person ikke nødvendigvis har indtastet et sprog, ved kommende taler.
Avatar billede ffsoft Praktikant
06. april 2006 - 17:40 #3
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)
Avatar billede egeriis Nybegynder
07. april 2006 - 10:13 #4
Hvordan vil du så foreslå at jeg stiller det op? :)
Avatar billede ffsoft Praktikant
08. april 2006 - 15:39 #5
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.
Avatar billede egeriis Nybegynder
11. september 2007 - 13:59 #6
Der lukkes. Ønsket point må I klage :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester