Avatar billede mini-me Nybegynder
04. maj 2009 - 21:31 Der er 14 kommentarer og
1 løsning

Funktion til at finde produkt relation

Hej,

Jeg har brug for at få lavet en sql sætning som kan optimere min kode.

Som det er nu performer det virkelig dårligt.

Det jeg har brug for er at tjekke hvilke "menuer" som mit produkt er medlem af.

Eks.:

Menu.:

Køkkenudstyr
  - Madkasser
    * Plastik kasser
      ø 60 x 60mm kasser
      ø 160 x 160mm kasser

    * Træ kasser
      ø 60 x 60mm kasser
      ø 160 x 160mm kasser
  - Maskiner
    * Formningsmaskine
    * Kaffemaskine
      ø Stål
      ø Aluuminum
      ø Blank


Hvis jeg har et produkt som ligger i 160x160mm kasser så ønsker jeg at få returneret :

Køkkenudstyr > Madkasser > plastik kasser > 160x160mm kasser

Min løsning ser ud som nedenstående, men det er jo dybt spild af performance at tjekke hver enkelt record og osv.


function parentGroups(currentGrouping)
           
        strSQL = "SELECT name, parentGroup from internetgroup where grouping='" & currentGrouping & "'"
        set groupRS = conn.execute(strSQL)
       
        if groupRS.eof or groupRS.bof then
            ' ingen overgruppe fundet,det er ok
            parentGroups = ""
        else
            parentGroups = groupRS("Name")
            if groupRS("ParentGroup") = "" then
                ' vi har de grupper vi skal bruge nu
            else
                ' den er stadig medlem af en menu kald funktionen igen
                parentGroups = parentGroups & " " & parentGroups(groupRS("ParentGroup"))
            end if
        end if
       
    end function
Avatar billede Syska Mester
04. maj 2009 - 22:45 #1
Hvad version af MSSQL bruger du ?
Avatar billede mini-me Nybegynder
04. maj 2009 - 23:06 #2
2005
Avatar billede Syska Mester
05. maj 2009 - 00:45 #3
Hvis du havde brugt 2008, så havde jeg måske en ide. Men ved 2005 må jeg melde pas.

// ouT
Avatar billede mini-me Nybegynder
05. maj 2009 - 10:54 #4
Ok - kunne man evt. ikke lave den som en stored procedure?
Avatar billede Syska Mester
05. maj 2009 - 12:50 #5
jo, helt klart ... der er bare nogen totalt nice fordele i 2008 angående Rekursive kald ...

Men jo, hvis du kender sidste child element ... er det jo bare at lave kald indtil du er nede på Top Parent element.

Når du siger det performer ringe ? Så skal der lidt tal på ... kan jo måske skyldes at der mangler index's eller andre ting som kan laves bedre :-)

Måske lidt struktur over din DB ... så kan der sikkert findes en løsning.

// ouT
Avatar billede mini-me Nybegynder
05. maj 2009 - 13:06 #6
Hej,

Jeg har ingen indflydelse på databasen - jeg henter bare data derfra :-)

Jamen det tager ca. 16 sekunder for at finde dette for 100 produkter...

tabellen inventory(indeholder produkter)

GUID | ItemName | InternetGroup
23 | Peter Pan bukser | Undertoj
24 | Peter Pan bukser | Undertoj
25 | Peter Pan bukser | Undertoj
26 | Peter Pan bukser | Undertoj

Tabellen internetgroup

GUID | InternetGroup | GroupName | ParentGroup
1 | Undertoj | Undertøj | Toj
2 | Toj | Tøj

Hvis jeg nu tog produkt 23 så skulle den returnere

Toj - Undertoj til mig.
Avatar billede mini-me Nybegynder
11. maj 2009 - 22:03 #7
Ingen andre med nogle ideer?
Avatar billede arne_v Ekspert
13. maj 2009 - 04:04 #8
Er der index på alle felter (udover primary key som har det automatis) ?

Hvis ikke og du ikke har mulighed for at ændre det, så ser det ret håbløst ud at lave det i DB.

Det vil derfor nok være bedre at læse det op fra databasen til memory og generere output derfra.
Avatar billede Syska Mester
13. maj 2009 - 11:27 #9
Hvis de ikke ændre sig så tit ... så kan du jo cache dem på serveren ...


Cache.Insert("uniquekey", object);

Så hvis det ikke findes kan du køre din SQL som så laver den ... og indsætter den i dit Cache object ... så kan du spares en masse ...

Men jeg ville nok også måske se om du kan få indexes på ... men Cache er altid en god ting.

// ouT
Avatar billede arne_v Ekspert
14. maj 2009 - 01:38 #10
Har ASP også et Cache objekt ?
Avatar billede Syska Mester
14. maj 2009 - 09:41 #11
Så ikke det var ASP ... men lader til at det også har det:
http://www.4guysfromrolla.com/webtech/052099-1.shtml

// ouT
Avatar billede arne_v Ekspert
16. maj 2009 - 03:26 #12
ASP har Application som også kan bruges til cache.
Avatar billede Syska Mester
16. maj 2009 - 13:20 #13
Ja, altså det samme som mit link henviser til :-)

// ouT
Avatar billede mini-me Nybegynder
19. maj 2009 - 14:39 #14
Hvad nu hvis jeg kune skulle lede i tabellen inventory?

Tabellen internetgroup

GUID | InternetGroup | GroupName | ParentGroup
1 | Undertoj | Undertøj | Toj
2 | Toj | Tøj |
3 | Bukser | Bukser | Toj
4 | Bluser | Bluser | Toj
5 | Sokker | Sokker | Toj
6 | Sko | Sko |
7 | Nike | Nike | Sko
8 | Adidas | Adidas | sko
9 | Adidas Herrer | Adidas Herre sko | adidas
10| Adidas Herre 40 | Adidas herrre sko str. 40 | Adidas herre

Hvis jeg nu forespørger på eks. internetgroup = Adidas Herre 40

så skal jeg have returneret

Sko | Adidas | Adidas Herrer | Adidas Herre 40
Avatar billede mini-me Nybegynder
20. maj 2009 - 09:07 #15
Prøv at omformulere og flytter den til et nyt spørgsmål
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