Avatar billede crapman Nybegynder
23. februar 2005 - 10:01 Der er 10 kommentarer og
1 løsning

Søgning på kryds af tabeller

Hejsa,
Jeg skal lave en funktion, som skal kunne søge i en række forskellige felter placeret i forskellige tabeller.

Jeg har en tabel kaldet main_item, hvor alle produkter er oprettet. Her skal man kunne søge på "item_no" som er id'et for hvert produkt. Derudover er der et felt der hedder "item_type" som angiver hvilken type produkt der er tale om.

Er item_type = axle, så eksisterer der en record i "item_axle"-tabellen, med samme item_no, og her kan man så finde endnu flere informationer om præcis dette produkt.

Problemet er bare, at jeg skal lave en søgefunktion, som kan søge på "item_no" i "main_item"-tabellen OG søge på individuelle felter i de underliggende tabeller.

Hvordan gør man det?
Avatar billede mostcrazy Nybegynder
23. februar 2005 - 10:11 #1
Kunne forestille mig at du skal have fat i noget JOIN. Jeg kan desværre ikke give en konkret eksempel da der er ved at være mange år siden jeg sidst har arbejdet med ASP. Tjek dog den her artikel http://activedeveloper.dk/artikler/default.asp?articleid=323 :o)
Avatar billede fennec Nybegynder
23. februar 2005 - 10:11 #2
Vil tro du skal bruge et left join. Sikkert noget i denne stil:

SELECT main_item.* FROM main_item LEFT JOIN item_axle ON item_axle.item_no = main_item.item_no WHERE (main_item.name LIKE '%søgeOrd%' OR item_axle.description LIKE '%søgeOrd%')
Avatar billede crapman Nybegynder
23. februar 2005 - 10:13 #3
Uhh ja fennec, du siger noget... Jeg prøver lige! Havde helt glemt den der left join
Avatar billede crapman Nybegynder
23. februar 2005 - 10:20 #4
Det ser sgu ud til at virke... men hvordan er det lige at jeg laver et udtræk fra de underliggende tabeller.. altså i mit loop?
Avatar billede fennec Nybegynder
23. februar 2005 - 10:24 #5
Der kan altså være flere poster i item_axle hvor item_no er det samme???
Avatar billede crapman Nybegynder
23. februar 2005 - 10:28 #6
nænæ... item_no er primary key... men altså, har jo nogle værdier i eks. item_axle som jeg gerne vil have printet på skærmen...

og jeg har også 8 andre tabeller som skal søges i.. hvordan gør jeg det??


Eks:

I main_item er der en record som har item_no = 28, og item_type = "axle", dette fortæller os at der også findes en record i item_axle som har item_no = 28.

Men lad os så sige at vi har en record i main_item som har item_no = 29, og item_type = "tire", så ved vi at der findes en record i item_tire som har item_no = 29, og så kan vi nu hente info om dette produkt fra item_tire.
Avatar billede fennec Nybegynder
23. februar 2005 - 11:01 #7
Det gør det jo lidt mere indvklet :o)
Ved ikke om det kan lade sig gøre. Da et felt skal bestemme, hvilken tabel der skal joines på.

Jeg vil dog tro at det stadig virker hvis du left joiner alle tabellerne sammen:
SELECT * FROM main_item
LEFT JOIN item_axle ON item_axle.item_no = main_item.item_no
LEFT JOIN item_tire ON item_tire.item_no = main_item.item_no
...
...

Du får dog en masse kolonner på hver post som er NULL, men det er jo ligemeget. Når du udskriver tjekker du så item_type også ved du hvilke kolonner der skal udskrives. Denne metode betyder dog at, med bortset fra item_no, må ingen felter hedde det samme. Dette gælder også på tværs af tabellerne, så der kan ikke være et felt der hedder "description" på flere af dem. Ellers skal du bruge index nummeret til at udskrive med:

response.write rs("etFelt")
kan også udskrives med:
response.write rs(3) '<-- tilsvarende nummer på select listen.
Avatar billede crapman Nybegynder
23. februar 2005 - 11:04 #8
Wohoo, jeg har lige talt med kunden og han havde glemt at fortælle at han ville have en dropdown, hvor man så vælger hvilken item-type man vil søge på. Det gør det jo unægteligt lidt nemmere.

Det er ret smart det der med index-nummeret. Det vidste jeg ikke at man kunne på den måde. Det optimerer vel også koden en del? Thi jeg har over 50.000 produkter i databasen...
Avatar billede fennec Nybegynder
23. februar 2005 - 11:27 #9
Det er ikke ret meget du henter, og da det kun er ved udskrift skal du nok udskrive alle 50000 produkter på en gang inden du opnår noget :o)

Det er mest brugt til dynamiske sql-sætninger, hvor brugeren selv har indflydelse, så man ikke hved hvilke felter/hvor mange der er på listen. Man kan så løbe dem igennem med en løkke til der opstår en fejl, som betyder der ikke er flere kolonner.
Avatar billede crapman Nybegynder
23. februar 2005 - 12:59 #10
Jeg tror sgu jeg har fået det til at fungere som det skal.. smider du et svar Fennec, så siger jeg 1000 tak for hjælpen :)
Avatar billede fennec Nybegynder
24. februar 2005 - 08:15 #11
.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
Kurser inden for grundlæggende programmering

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