26. marts 2006 - 19:14Der er
4 kommentarer og 1 løsning
SQL og JOIN
Jeg må indrømme at JOIN ikke er min aller stærkeste side.
I nedenstående kode, henter jeg nogle telefon numre ud fra en database, men det er altså lavet med 3 løkker inde i hinanden, hvilket ikke er helt hensigtsmæssigt. Kan dette laves mere optimeret ved brug af JOIN, og hvis - hvordan?
Set rsMelding = Conn.Execute("Select * FROM meldinger WHERE id = " & meldingID) Set rsOrdre = Conn.Execute("Select * FROM ordre WHERE betalt = 1 AND aktivt = 1 AND slettet = 0")
Do while not rsOrdre.eof response.Write("ORDRE: " & rsOrdre("kundeID") & "<br>") Set rsDaekning = Conn.Execute("Select * FROM daekning WHERE gruppe = " & rsOrdre("daekning") & " AND kommune = " & rsMelding("kommune") & " AND kundeID = " & rsOrdre("kundeID")) Do while not rsDaekning.eof response.Write("DÆKNING: " & rsDaekning("kundeID") & "<br>") Set rsTider = Conn.Execute("Select * FROM tider WHERE (periode = 1 OR periode = " & periode & ") AND gruppe = " & rsDaekning("gruppe") & " AND (CURTIME() BETWEEN TIME(frakl) AND TIME(tilkl)) AND kundeID = " & rsDaekning("kundeID")) Do while not rsTider.eof response.Write("TIDER: " & rsTider("kundeID") & "<br>") numre = numre & rsTider("kundeID") & "," rsTider.movenext Loop rsDaekning.movenext Loop rsOrdre.movenext Loop
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Der var sådan set lidt overflødig kode der, jeg brugte til test:
Set rsMelding = Conn.Execute("Select * FROM meldinger WHERE id = " & meldingID) Set rsOrdre = Conn.Execute("Select * FROM ordre WHERE betalt = 1 AND aktivt = 1 AND slettet = 0")
Do while not rsOrdre.eof Set rsDaekning = Conn.Execute("Select * FROM daekning WHERE gruppe = " & rsOrdre("daekning") & " AND kommune = " & rsMelding("kommune") & " AND kundeID = " & rsOrdre("kundeID")) Do while not rsDaekning.eof Set rsTider = Conn.Execute("Select * FROM tider WHERE (periode = 1 OR periode = " & periode & ") AND gruppe = " & rsDaekning("gruppe") & " AND (CURTIME() BETWEEN TIME(frakl) AND TIME(tilkl)) AND kundeID = " & rsDaekning("kundeID")) Do while not rsTider.eof numre = numre & rsTider("kundeID") & "," rsTider.movenext Loop rsDaekning.movenext Loop rsOrdre.movenext Loop
Ja de skulle gerne være bedre, om ikke andet slår man kun op en gang i database frem for X'antal gange.
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.