02. august 2006 - 21:35Der er
27 kommentarer og 1 løsning
Ændring af database opbygning
Jeg står og skal have lavet en ændring i min databases opbygning. Kort fortalt går det ud på at ændre således at jeg kan tilknytte en kategori og post til en eller flere sprog, samt knytte en post til en eller flere kategorier.
Det nemmeste er nok at få et overblik over min nuværende og planlagte ændringer ved at se følgende billede: http://www.dyrlund.dk/db.jpg
Mit spørgsmål går ud på om det er den rigtige måde at bygge det op på, eller om jeg skal gøre det på en anden måde. Det skal helst komme til at køre så hurtigt som muligt og være bygget op på den mest optimale måde mht. sql udtræk og opbygning. Databasen består pt. af ca. 700 kategorier og underkategorier og over 40.000 poster.
Til info, så arbejder jeg med ASP op imod MySQL databasen.
Og når jeg har styr på den nye opbygning, så skal der nok komme ekstra spørgsmål her (mod flere point) eller i et nyt spg. Jeg skal nemlig nok have hjælp til at ændre den nuværende datas opbygning til den nye vha. sql statements. Desuden bliver der noget med mine sql udtræk på mine side, men det tager vi når det bliver aktuelt!
Ok. Det lyder godt. Nu kommer alt det sjove så! Jeg skal have ændret mit nuværende data til den nye struktur. Jeg skal gerne have hjælp til at gøre dette ved hjælp af nogle sql sætninger. Jeg har oprettet de forskellige nye tabeller og skal have hjælp til følgende:
1. Flytte navn fra tabellen kategorier over i kategoriXsprog. KID'et skal sættes lig ID'et på kategorier og Sprog skal bare sættes lig DK.
2. Flytte parentid fra tabellen data over i dataXkategori. I tabellen dataXkategori er KID lig det parentid som posten har i data tabellen.
Hvordan skal denne sql ændres, så den virker med den nye struktur?
SELECT Count(*) as Antal FROM StemmerXIp as S, Data as D, Kategorier as K Where S.BrugerID = '1' and S.ID = D.ID and D.ParentID = K.ID And (K.ID = 0 " & IDer & " )
Skal også have lidt hjælp til at rette følgende sql til, så den passer til den nye struktur:
Sql = "SELECT D.Id, D.ParentID, D.Navn, D.Stemmer, D.Score, D.Url, D.hits, D.dato, D.censur FROM Data D where D.ID not in (select S.ID from stemmerxip S where S.BrugerID ='" & Session("BrugerID") & "') and (" & Replace(Session("SqlSoeg"), "ParentID", "D.ParentID") & ") and (Sprog LIKE '%" & Session("Lang") & "%' or Sprog = 'All') and " & Session("CensurSql") & " Order By LENGTH(D.Tekst), D.Score/D.Stemmer desc LIMIT " & intStart & ", " & intPageSize & ";"
Mht. join så ved jeg ikke hvorfor jeg ville have LEFT med, det er noget jeg altid har brugt.
Og mht. de 2 nævnte sql'er, så har jeg svært ved at samle det hele når jeg henter fra flere tabeller og har flere selects. Håber på at jeg kunne få hjælp til at ombygge de 2 sql'er. Skal naturligvis nok suppler med flere point.
SELECT Count(*) as Antal FROM StemmerXIp as S, Data as D, Kategorier as K Where S.BrugerID = '1' and S.ID = D.ID and D.ParentID = K.ID And (K.ID = 0 " & IDer & " )
må vel blive til
SELECT Count(*) as Antal FROM StemmerXIp as S, Data as D, DataXKategorier as DXK, Kategorier as K Where S.BrugerID = '1' and S.ID = D.ID and D.ParentID = DXK.DID and DXK.KID = K.ID And (K.ID = 0 " & IDer & " )
Kan du hjælpe med denne hvor jeg i forvejen har en join: Sql = "SELECT D.Url, D.navn, D.ID FROM Data as D JOIN nyhedsbrev_templates_log L ON D.ID = L.DataID Where L.DataID IS NULL and (ParentID = 0 " & FindIDer(3) & ") Order By Score/Stemmer desc"
Jeg har prøvet med nedenstående men det trækker ingen poster ud: Sql = "SELECT D.Url, D.navn, D.ID FROM Data as D, dataXkategori as dXk JOIN nyhedsbrev_templates_log L ON D.ID = L.DataID Where D.ID = dXk.DID and L.DataID IS NULL and (ParentID = 0 " & FindIDer(3) & ") Order By Score/Stemmer desc"
Hvis jeg trækker joinen med nyhedsbrev_templates_log ud og kravet at L.DataID IS NULL, så får jeg fint posterne ud. Så det er sammenkoblingen af dette med de 2 andre tabeller der giver problemer. Er der nogen der kan se hvorfor?
Og hvis jeg kun fjerner "L.DataID IS NULL" så får jeg de poster ud som ligger i nyhedsbrev_templates_log. Og det er netop alle andre poster jeg skal have ud end lige dem!
Sql = "SELECT D.Url, D.navn, D.ID FROM (Data as D JOIN dataXkategori as dXk ON D.ID = dXk.DID) LEFT JOIN nyhedsbrev_templates_log L ON D.ID = L.DataID Where L.DataID IS NULL and (ParentID = 0 " & FindIDer(3) & ") Order By Score/Stemmer desc"
Lige en sidste ting, skal jeg gøre noget for at få mine sql udtræk til at køre hurtiger, syntes de er noget langsommer efter opdateringen. Og hvilke "Indeks" skal jeg give de 4 tabeller?
Kan det passe at det fylder meget at oprette de indeks? Min database gik fra 9.1 MB til 15.2 MB. Men hvis det er normalt så er det jo fint. Vil hellere have at det fylder det mere mod at det så kørere det hurtigere!
med korte raekker fylder index paent i forhold til data
Synes godt om
Ny brugerNybegynder
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.