Toon posts:

[ASP/SQL] Recursief data opzoeken *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi allen,

ik heb een database met daarin 3 velden ..
-----
ID Naam en Verwijzing
-----

De verwijzing verwijst naar een ID uit een ander record maar wel dezelfde tabel.
(Ik creëer dus een soortje van mapstructuur)
..
Nu ben ik opzoek naar het juist statement dat vanuit een record (ID, Naam, Verwijzing) ieder verwijzingsrecord toont met vervolgens daar weer het bovenliggende record net zolang totdat de verwijzing leeg is.

Het zal iets zijn met een inner join met daarom heen een if statement en een variabele veldnaam voord select.
Hierna wil ik in ASP de structuur tonen..
----
Ik had al wat maar het werkt dus niet...
SELECT Bestand.Bestand_Naam, Map.Map_Naam, Map_1.Map_Naam
FROM (Bestand INNER JOIN Map ON Bestand.Map_ID = Map.Map_ID) INNER JOIN Map AS Map_1 ON Map.Map_Verwijzing = Map_1.Map_ID;
WERE if Map_1.Map_Verwijzing is NOT NULL;
then INNER JOIN Map AS Map_1 ON Map.Map_Verwijzing = Map_1.Map_ID;
----

HELP ???!!!

ik ben het SQL-draadje kwijt..

Alvast bedankt..

Antjan

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Is dit niet makkelijker en sneller door een recursieve functie te maken in ASP? dan eindeloos met joins aan de gang te gaan?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Wat voor database gebruik je?
Zoals gorgi_19 al zegt kun je dit meestal het beste oplossen in je script-taal en niet in je SQL.
Oracle vormt hierop een uitzondering omdat die daar een SQL oplossing voor heeft (connect by).

Who is John Galt?


  • [ash]
  • Registratie: Februari 2002
  • Laatst online: 16-08 20:24

[ash]

Cookies :9

Misschien een typo, wHere :?

En die 2 punt-komma's in je statement, die mogen daar toch niet staan ?

[ Voor 53% gewijzigd door [ash] op 01-08-2003 12:46 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

[ash] schreef op 01 August 2003 @ 12:45:
Misschien een typo, wHere :?

En die 2 punt-komma's in je statement, die mogen daar toch niet staan ?
Nu ik die query zo kijk.. Sinds wanneer is THEN in deze vorm geldig SQL? :?

[ Voor 4% gewijzigd door gorgi_19 op 01-08-2003 12:48 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Is het SQL Server? Zo ja: tijd om je te verdiepen in Stored Procedures.

Ze draaien op de SQL Server zelf, maar lijken veel op al dan niet recursieve ASP functies.

Verwijderd

Topicstarter
Access Database.. en ik weet dat mijn sqlstatement er niet echt goed uitziet.. heb erin lopen klungelen...

Stored Procedures , ASP?

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Een stored procedure is een functie die opgeslagen wordt in de DB.
Ze wordt dus ook uitgevoerd door het DBMS wat de performance oa ten goede komt.

Echter, in Access is het niet mogelijk om stored procedures te maken.

Jouw query statement ziet er alleen niet goed uit, het is ook niet goed. Er staan ';' in, waarmee je een statement afsluit (ik denk wel dat Access die ; - tekens ook niet eens accepteert). Daarnaast zet je ook nog eens een IF constructie in de WHERE clause, dat is ook niet helemaal kosjer.

https://fgheysels.github.io/


Verwijderd

Topicstarter
dus een recursieve functie zou beter gaan werken?? Geen stored procedure ... en mijn SQL ..?

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
In je recursieve functie ga je iedere keer een SQL statement uitvoeren die de door jou gewenste gegevens gaat ophalen.

Trouwens, kan je hier niet met self-joins uit de voeten?

[ Voor 21% gewijzigd door whoami op 01-08-2003 13:29 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
ik ben op zoek naar de juiste methode.. als ik die weet zal het wel lukken..

  • [ash]
  • Registratie: Februari 2002
  • Laatst online: 16-08 20:24

[ash]

Cookies :9

Verwijderd schreef op 01 augustus 2003 @ 13:22:
Access Database.. en ik weet dat mijn sqlstatement er niet echt goed uitziet.. heb erin lopen klungelen...
Sorry hoor, maar als je dat al weet waarom post je dan hier. Moeten wij soms jouw pijnhoop opruimen. |:(

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 01 augustus 2003 @ 13:24:
Een stored procedure is een functie die opgeslagen wordt in de DB.
Ze wordt dus ook uitgevoerd door het DBMS wat de performance oa ten goede komt.

Echter, in Access is het niet mogelijk om stored procedures te maken.

Jouw query statement ziet er alleen niet goed uit, het is ook niet goed. Er staan ';' in, waarmee je een statement afsluit (ik denk wel dat Access die ; - tekens ook niet eens accepteert). Daarnaast zet je ook nog eens een IF constructie in de WHERE clause, dat is ook niet helemaal kosjer.
AFAIK ken Access niet eens if constructies, maar moet je met iif aan de slag.. Access is zelf dol op ; (blijft een vage database), maar accepteert ook SQL statements zonder de ;.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
jaja dus zolang map_verwijzin is not null dan schrijf bovenliggende map

Verwijderd

Topicstarter
[ash] schreef op 01 August 2003 @ 13:29:
[...]
Sorry hoor, maar als je dat al weet waarom post je dan hier. Moeten wij soms jouw pijnhoop opruimen. |:(
Ik zorg wel voor mijn eigen puinhoop... vraag dus alleen naar de beste methode voor zoveel herhalingen binnen 1 tabel... O+

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Wel, de tips zijn al gegeven:
recursieve functie.
(Als je niet weet wat dat is, zoek dan eens op google wat het is, of open eens een boek over programmeren)
of kijk eens of je met een self-join het gewenste resultaat niet kunt bekomen. (Als je niet weet wat dat is, ga ook eens kijken in een SQL Tutorial wat dat precies is).

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 01 August 2003 @ 13:31:
[...]


Ik zorg wel voor mijn eigen puinhoop... vraag dus alleen naar de beste methode voor zoveel herhalingen binnen 1 tabel... O+
SQL resultaten opslaan in een array, deze cachen in een applicationvariabele en door middel van een recursieve functie doorlopen.

Lijkt me sterk dat een selfjoin dit sneller kan.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
gorgi_19 schreef op 01 August 2003 @ 13:36:
[...]

Lijkt me sterk dat een selfjoin dit sneller kan.
Dat denk ik ook ja.
Als je iets kan laten uitvoeren door de DB , kies dan voor die optie.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 01 August 2003 @ 13:37:
[...]


Dat denk ik ook ja.
Als je iets kan laten uitvoeren door de DB , kies dan voor die optie.
Als ik je zin goed snap, zeg je dan dat de database de beste optie is?
* gorgi_19 heeft hier namelijk z'n sterke twijfels over...

Zeker ook als je het dictionary object (vergelijkbaar met hashtable) gaat opslaan in een applicationvariabele (soort van caching)

[ Voor 31% gewijzigd door gorgi_19 op 01-08-2003 13:39 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
gorgi_19 schreef op 01 August 2003 @ 13:38:
[...]

Als ik je zin goed snap, zeg je dan dat de database de beste optie is?
* gorgi_19 heeft hier namelijk z'n sterke twijfels over...
Hoezo dan?

Data-centric stuff moet je -als het mogelijk is- altijd door de DB laten uitvoeren. Dit gaat veel sneller, en zorgt ervoor dat je niet voortdurend data over het netwerk moet sturen.
Als de DB de data al op de juiste manier voor jou kan ophalen, waarom zou je het dan niet zo doen?

[ Voor 10% gewijzigd door whoami op 01-08-2003 13:40 ]

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 01 August 2003 @ 13:40:
[...]


Hoezo dan?

Data-centric stuff moet je -als het mogelijk is- altijd door de DB laten uitvoeren. Dit gaat veel sneller, en zorgt ervoor dat je niet voortdurend data over het netwerk moet sturen.
Als de DB de data al op de juiste manier voor jou kan ophalen, waarom zou je het dan niet zo doen?
Ik ontlast een database toch juist?
Start functie
1. Controleer of application object bestaat met Dictionary
Als niet bestaat
1a. Haal alle records op.
1b Stop deze in een dictionary object
Einde als
2. Maak lokale instantie aan van Dictionary object
3. Gebruik een recursieve functie om de boel te maken.
Einde functie

Als je continue queries uitvoert tegen je database, ben ik het met je eens. Echter, in dit geval maak je een lokale 'kopie' aan.

Voorbeeldje:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
        Private _tabs As ArrayList

       Public Sub New()

            Me._tabs = _portalSettings.DeskTopTabs 
            ' Lokale instantie. Indien niet bestaat, dan ophalen uit de database.
            ' Heeft application scope.

        End Sub

        Private Function GetRecursivePathToItem(ByVal ItemID As Integer) As ArrayList

            Dim _tabStripDetails As TabStripDetails
            Dim _path As ArrayList = New ArrayList

            Dim tabid As Integer = ItemID
            While Not tabid = 0

                Dim parentID As Integer = GetParent(tabid)
                tabid = parentID
                If tabid > -1 Then

                    _path.add(parentID)

                End If

            End While

            Return _path

        End Function

        Private Function GetParent(ByVal ItemID As Integer) As Integer

            Dim _tabStripDetails As TabStripDetails
            For Each _tabStripDetails In Me._tabs

                If _tabStripDetails.TabId = ItemID Then
                    Return _tabStripDetails.Parent
                End If

            Next

            Return 0

        End Function

_tabstripdetails is een object, met wat pagina informatie.
_tabs zijn alle pagina's.

[ Voor 55% gewijzigd door gorgi_19 op 01-08-2003 13:47 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Je ontlast een database, maar je belast de client, terwijl die last voor de DB een fluitje van een cent is.
Gebruik de DB voor wat hij bedoeld is, en dat is niet alleen voor het opslaan van data.

https://fgheysels.github.io/


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Verwijderd schreef op 01 August 2003 @ 12:30:
ik ben het SQL-draadje kwijt..
[rml][ SQL] alle childs vanaf parent selecteren[/rml] en MySQL Tree Database crearen.. zijn de topics die je zoekt. Daar werd deze discussie ook al gehouden.

[ Voor 7% gewijzigd door LordLarry op 01-08-2003 14:28 ]

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

gorgi: hoe weet je wanneer je cache niet meer up-to-date is?

Als gegevens geupdate zijn, kan je weer overnieuw beginnen. Hangt dus ook af van hoe statisch je data is.

[ Voor 15% gewijzigd door Verwijderd op 02-08-2003 10:49 ]

Pagina: 1