Avatar billede jedimaster Nybegynder
29. juni 2006 - 15:42 Der er 15 kommentarer og
1 løsning

Søgning i flere tabeller.

Hej.

Jeg er i gang med hjemmeside, der indeholder en større database, hvor flere tabeller hænger sammen - således at det hele kobles sammen af et id i en "hovedtabel", om man så må sige.

Jeg skal nu have lavet en søgefunktion - en der søger gennem alle felter i de sammenhængende tabeller (kaldet simpel søgning) og en der søger i en specifik række.

Er der en der kan hjælpe med sådan en søgefunktion? Jeg kan enten poste tabellerne her eller sende dem via mail.
Avatar billede fennec Nybegynder
29. juni 2006 - 15:47 #1
Vi skal have en tabel/kolonne oversigt inden vi kan gøre noget som helst.
Avatar billede fennec Nybegynder
29. juni 2006 - 15:50 #2
Bare noget i denne stil:

[hovedtabel]
ID, typeID ...(ubetydlige kolonner behøver du ikke skrive så som navn, email osv.)

[subTabel]
ID, hovedID ...
hovedID = hovedtabel.ID

[TypeTabel]
ID, ...
ID = hovedtabel.typeID
Avatar billede fennec Nybegynder
29. juni 2006 - 15:51 #3
Hvis det er felter som skal søges på/i skal vi have dem med på listen.
Avatar billede jedimaster Nybegynder
29. juni 2006 - 16:31 #4
OK. Uno momento - det er ret kompliceret efter mine begreber og kendskab til programmering i php/mySql
Avatar billede jedimaster Nybegynder
29. juni 2006 - 16:58 #5
[movie]
id
barcode
title
subtitle
year
company_id
category_code
barcode2
language
web1
web1_text
location_id

[headword]
id
word

[headword_movie]
id
headword_id
movie_id

[category]
id
category_code
category_name

[actor]
id
name

[actor_movie]
id
actor_id
movie_id

[compagny]
id
name

[location]
id
location

Movie-tabellen er selvfølgelig den der "holder det hele sammen". Søge funktionen skal søge i alle tabellers rækker, men når resultatet vises, skal en film kun vises en gang.

Det skal måske lige siges, at både både mellem relationerne headword<->movie og actor<->move, jo kan forekomme flere - hvad kalder men det - relationer. Således kan der til hver film kobles både mere end 1 headword (stikord) og mere end 1 skuespiller.

Jeg syntes det er en hård nød at knække!!!
Avatar billede jedimaster Nybegynder
29. juni 2006 - 17:00 #6
- lige et side spørgsmål. Jeg bruger jer eksperter en del, og det er ultimativt! Er det smart at blive pro-medlem, hvis man ikke svarer på så mange spørgsmål, men stiller flere?
Avatar billede arne_v Ekspert
30. juni 2006 - 00:32 #7
Faktisk ikke de helt store fordele.

Du kan fravælge nogle reklamer, du får artikler til halv pris og lidt andre småting.

Men nu er det jo heller ikke vanvittigt dyrt.
Avatar billede fennec Nybegynder
30. juni 2006 - 08:16 #8
Hvad skal der være af søgemuligheder??
Her tænker jeg på om der kun er en tekstboks, hvor man kan skrive en tekst som så skal søge i headword/location/actor osv., eller er de opdelt i flere søgefelter så man specifikt har en boks til actor, en anden til location osv??
Avatar billede jedimaster Nybegynder
30. juni 2006 - 12:51 #9
Der skal være to søgesider. En der er en simpel søgning, hvor brugeren søger via EN søgeboks i alle tabeller. Og en anden side, hvor brugeren kan søge via fem felter - ved siden af hvert felt, skal der så være en menu, hvor brugeren vælger det felt han vil søge i.

Se feks. www.kb.dk i deres REX-system. Hvis man vælger avanceret søgning, er der den funktion jeg ønsker på side nr. 2.
Avatar billede fennec Nybegynder
30. juni 2006 - 13:26 #10
Den første "simpel" søgning skal laves med union:

select distinct m.id, m.title from movie m inner join headword_movie hm on hm.movie_id=m.id inner join headword h on h.id=hm.headword_id where h.word='search'
union
select distinct m.id, m.title from movie m inner join actor_movie am on am.movie_id=m.id inner join actor a on a.id=hm.actor_id where a.name='search'
union
select distinct m.id, m.title from movie m inner join compagny c on c.id=m.company_id where c.name='search'
union
select distinct m.id, m.title from movie m inner join category c on c.category_code=m.category_code where c.category_name='search'
union
select distinct m.id, m.title from movie m inner join location l on l.id=m.location_id where l.location='search'

Du vil måske gerne udbytte alle "=" til en "like" syntax i stedet, så hvis man skriver "drew" finder den "drew barrymore". Det skal så se sådan ud i stedet:

a.name like '%search%'
Avatar billede jedimaster Nybegynder
30. juni 2006 - 13:33 #11
Jeg prøver det lige.
Avatar billede jedimaster Nybegynder
30. juni 2006 - 14:48 #12
Lige umiddelbart virker det ikke. Jeg har lavet en copy-paste. Jeg er ikke helt sikker på om jeg skal gøre noget ved din select, feks. sætte AS mellem movie og m eller???

Jeg har lige læst en artikel om Full-Text searching. Er det noget man ville kunne anvende her? Jeg kender ikke så meget til det.
Avatar billede fennec Nybegynder
03. juli 2006 - 09:37 #13
Den burde virke som den er. Du skal bare udskifte "search" med søgeordet.

Får du en fejl??
Avatar billede jedimaster Nybegynder
04. juli 2006 - 21:07 #14
Jeg får fejlen Unknown table 'hm' in on clause
Avatar billede jedimaster Nybegynder
03. oktober 2009 - 15:02 #15
FEnnec - kunne du svare - så kan jeg få ryddet ud i mine point som bare står hen?? Takker.
Avatar billede fennec Nybegynder
07. oktober 2009 - 07:57 #16
Sure.
Beklager det sene svar, men jeg har lagt syg :(

.o) <-- One Eyed Jack
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