Toon posts:

[ASP] Probleem om bepaalde gegevens op te halen uit DB

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met het ontwikkelen van een competitie-webapplicatie. Hierbij heb ik een Access-database met daarin onder andere de tabellen "Indeling" en "Wedstrijden". In de tabel "Indeling" staan alle poule-indelingen opgeslagen (poulenummer, plaatsingsnummer, teamnummer) en in de tabel "Wedstrijden" vind je een wedstrijdnummer, een poulenummer en tweemaal een clubnummer (van de clubs die tegen elkaar spelen). In deze tabel staan op die manier dus alle wedstrijden opgeslagen.

Nu wil ik van iedere club het programma kunnen laten weergeven (met dus alleen de wedstrijden van één bepaalde club. Deze wedstrijden wil ik gesorteerd hebben op datum. Het moet er dan als volgt uitzien:

Datum
--------
Wedstrijdnummer, Thuisploeg, Uitploeg, enz.
Wedstrijdnummer, Thuisploeg, Uitploeg, enz.

Datum 2
-----------
enz.

Ik heb echter een probleem om deze verschillende data weergegeven. Tot nu toe heb ik de volgende code:

SQL = "SELECT * FROM indeling WHERE clubnummer=" & club & ";"
rs.Open SQL,adoCon

Do While Not rs.EOF
poule = rs("poulenummer")
plaatsingsnummer = rs("plaatsingsnummer")

SQL2 = "SELECT * FROM wedstrijden WHERE poulenummer=" & poule & " AND thuisploeg=" & plaatsingsnummer & " OR poulenummer=" & poule & " AND uitploeg=" & plaatsingsnummer & " ORDER BY datum;"
rs2.Open SQL2, adoCon

Do While Not rs2.EOF
Response.Write(rs2("wedstrijdnummer") & " ")
Response.Write(rs2("datum") & "<br>")
rs2.MoveNext
Loop

rs2.Close
rs.MoveNext
Loop

rs.Close


Iemand die kan zeggen hoe ik precies deze verschillende data in beeld krijg?

Alvast bedankt!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

En nu mis ik alleen nog
1. [code=asp][/code] tags om je code
2. Een foutmelding / verschijnselen
3. Wat er precies niet lukt.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

Waarom maak je gebruik van twee aparte queries :?
Het zou toch net zo goed met een OUTER JOIN kunnen?
SQL:
1
2
3
4
SELECT * FROM indeling
LEFT JOIN wedstrijden ON indeling.teamnummer = wedstrijden.teamnummer
WHERE indeling.teamnummer =" & teamnummer & "
ORDER BY datum DESC

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


Verwijderd

Topicstarter
ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SQL = "SELECT * FROM indeling WHERE clubnummer=" & club & ";"
rs.Open SQL,adoCon

Do While Not rs.EOF
poule = rs("poulenummer")
plaatsingsnummer = rs("plaatsingsnummer")
    
SQL2 = "SELECT * FROM wedstrijden WHERE poulenummer=" & poule & " AND thuisploeg=" & plaatsingsnummer & " OR poulenummer=" & poule & " AND uitploeg=" & plaatsingsnummer & " ORDER BY datum;"
rs2.Open SQL2, adoCon
        
Do While Not rs2.EOF
speeldatum = rs2("datum")
            
???
Loop
        
rs2.Close
rs.MoveNext
Loop

rs.Close


Dit is dus m'n code (netjes tussen de code-tags nu :))

Ik heb op dit moment alle wedstrijden geselecteerd van een bepaald team. Dit is dus al wel gelukt. Het is mogelijk om een lijst weer te geven met alle wedstrijdnummers van één bepaalde club. Zo'n club bestaat echter uit meerdere teams (er zijn dus meerdere wedstrijden per datum).

Hoe kan ik de wedstrijden van deze ploeg dus rangschikken per datum? (Er gaat dus op zich niets fout, maar ik krijg het niet voor elkaar om dit op de juiste manier te ordenen)...

Moet waarschijnlijk op de plaats van de vraagtekens dus wat code worden toegevoegd.

[ Voor 13% gewijzigd door Verwijderd op 17-12-2003 11:47 ]


Verwijderd

Topicstarter
DeverauX schreef op 17 december 2003 @ 11:42:
Waarom maak je gebruik van twee aparte queries :?
Het zou toch net zo goed met een OUTER JOIN kunnen?
SQL:
1
2
3
4
SELECT * FROM indeling
LEFT JOIN wedstrijden ON indeling.teamnummer = wedstrijden.teamnummer
WHERE indeling.teamnummer =" & teamnummer & "
ORDER BY datum DESC
M'n SQL is niet zo denderend, laten we het daar op houden...

  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

Verwijderd schreef op 17 december 2003 @ 11:45:
[...]
M'n SQL is niet zo denderend, laten we het daar op houden...
Als je een oplossing voor je probleem wilt zit er maar één ding op natuurlijk. ;)
Even een SQL-tutorial doornemen dus :)

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


  • BasSpruit
  • Registratie: September 2002
  • Laatst online: 09-04-2022
Verwijderd schreef op 17 december 2003 @ 11:26:
ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SQL = "SELECT * FROM indeling WHERE clubnummer=" & club & ";"
rs.Open SQL,adoCon
    
 Do While Not rs.EOF
   poule = rs("poulenummer")
   plaatsingsnummer = rs("plaatsingsnummer")
    
   SQL2 = "SELECT * FROM wedstrijden WHERE poulenummer=" & poule & " AND 
   thuisploeg=" & plaatsingsnummer & " OR poulenummer=" & poule & " AND
   uitploeg=" & plaatsingsnummer & " ORDER BY datum;"
   rs2.Open SQL2, adoCon
        
   Do While Not rs2.EOF
   Response.Write(rs2("wedstrijdnummer") & "  ")
   Response.Write(rs2("datum") & "<br>")
   rs2.MoveNext
 Loop
        
rs2.Close
rs.MoveNext
Loop
    
rs.Close
Kan je deze 2 queries niet makkelijker in 1 gooien? dan wordt je code ook een stuk begrijpelijker.

SQL - queries kan je desnoods ook nog wel met Access zelf maken, maar dat wist je waarschijnlijk wel. - dit komt er ongeveer zo uit te zien:
ASP:
1
2
3
4
5
SQL = SELECT * FROM [indeling] INNER JOIN Wedstrijden ON [indeling].[poulenummer] = "_
& "[wedstrijden].[poulenummer] WHERE clubnummer=" & club & " AND " _
& "([thuisploeg] = " & plaatsingsnummer & " AND [poulenummer] = " _
& poule & ") OR ([uitploeg] = " & plaatsingsnummer & " AND [poulenummer] = "_
& poulenummer & ");"


dan hoef je jezelf niet druk te maken over meerdere recordsets. Je merkt dat ik overal een [ en een ] heb staan. daardoor kan je elke mogelijke naam gebruiken. (ook met spaties, maar ook gereserveerde woorden)

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
Als je gebruik maakt van een outer join, kan je nochtans heel wat snelheidswinst behalen in deze situatie.
Je gaat dan nl. slechts 1x je gegevens ophalen (1 query), terwijl je anders per club nog eens gegevens over wedstrijden moet gaan ophalen.

Om een goed antwoord te geven op jouw vraag, zullen we toch eerst even moeten weten hoe jouw data opgeslagen wordt, maw, welke tabellen heb je, en hoe staan deze tabellen met elkaar in relatie?
Misschien kan je daar even een schemaatje van posten.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Het probleem is dat ik met twee databases werk...

1. Algemeen
2. Competitie

In de algemene database worden gegevens opgeslagen als scheidsrechters, locaties (dingen die nooit veranderen dus)

In de competitie database worden de tabellen indeling en wedstrijden opgeslagen.

Tabel Indeling:
- Poulenummer
- Klassenaam
- Plaatsingsnummer
- Teamnummer

Tabel Wedstrijden:
- Wedstrijdnummer (bestaat uit poulenummer + 2x plaatsingsnummer (thuis/uitploeg))
- Poulenummer
- Plaatsingsnummer thuis
- Plaatsingsnummer uit
- Datum
- Tijd
- Scheidsrechter
- Locatie

Je kan dus door middel van het poulenummer en plaatsingsnummer uit de tabel Wedstrijden het bijbehorende teamnummer vinden. De clubnaam die bij dit teamnummer hoort staat echter vermeldt in de andere database...

Hoop dat het zo iets duidelijker is!

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
waarom 2 databases?

dat betekend namelijk ook weer 2 connecties etc.

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


Verwijderd

Topicstarter
Dat klopt ja, dit is echter noodzakelijk, omdat dit systeem meerdere jaren moet meegaan. Voor iedere competitie volgt een aparte competitiedatabase. De algemene database blijft ongewijzigd

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 17 december 2003 @ 12:45:
Dat klopt ja, dit is echter noodzakelijk, omdat dit systeem meerdere jaren moet meegaan. Voor iedere competitie volgt een aparte competitiedatabase. De algemene database blijft ongewijzigd
:? Wat is het nut van ieder jaar een andere database? Kan toch, met een normaal dataontwerp, alles in 1 database houden?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Je locaties e.d. blijven jarenlang hetzelfde. De competitie verandert echter ieder jaar... Deze staat daarom in een aparte database...

Alle indelingen en wedstrijden worden in deze database geladen met behulp van een competitieprogramma dat binnen de sportbond wordt gebruikt. Het is dus niet de bedoeling dat er iedere competitie ergens anders heen wordt geladen...

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 16:07
Wat een onzin zeg, elk jaar een andere database. Maak je het jezelf erg lastig mee:
-elk jaar onderhoud nodig
-lastige koppelingen met 2 databases
-historische gegevens gaan verloren

Het lijkt me niet zo moeilijk om het datamodel zo aan te passen dat het gewoon netjes in 1 databse staat

Roomba E5 te koop


Verwijderd

Topicstarter
sig69 schreef op 17 december 2003 @ 12:51:
Wat een onzin zeg, elk jaar een andere database. Maak je het jezelf erg lastig mee:
-elk jaar onderhoud nodig
-lastige koppelingen met 2 databases
-historische gegevens gaan verloren

Het lijkt me niet zo moeilijk om het datamodel zo aan te passen dat het gewoon netjes in 1 databse staat
Ik denk niet dat dit onzin is... Heb hier zelf ook goed over nagedacht...

Ik heb nu een database comp0304. Volgend jaar één met de naam comp0405. Op deze manier gaan de historische gegevens dus niet verloren... Al deze competities verschijnen in een dropdown menu, waardoor er eenvoudig is terug te schakelen naar een vorige competitie. Die lastige koppelingen blijf je dus inderdaad wel houden, en dat onderhoud is beperkt... Dat is slechts een database hernoemen en een nieuwe database aanmaken (met 2 hele tabellen, nauwelijks werk dus, want de database die bij de huidige competitie hoort heet gewoon comp.mdb)

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 17 december 2003 @ 12:55:
[...]


Ik denk niet dat dit onzin is... Heb hier zelf ook goed over nagedacht...

Ik heb nu een database comp0304. Volgend jaar één met de naam comp0405. Op deze manier gaan de historische gegevens dus niet verloren... Al deze competities verschijnen in een dropdown menu, waardoor er eenvoudig is terug te schakelen naar een vorige competitie. Die lastige koppelingen blijf je dus inderdaad wel houden, en dat onderhoud is beperkt... Dat is slechts een database hernoemen en een nieuwe database aanmaken (met 2 hele tabellen, nauwelijks werk dus, want de database die bij de huidige competitie hoort heet gewoon comp.mdb)
Alleen een beetje jammer als er een nieuwe functionaliteit bij moet komen, waardoor je je oude database of allemaal moet aanpassen aan de nieuwe structuur, of geen enkele updatemogelijkheid hebt.
Ook leuk als je gegevens moet hebben over de competities heen.

Echter, jij moet er mee werken; 't is alleen een methodiek die mij zwaar is tegen gevallen. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op 17 december 2003 @ 12:57:
Ook leuk als je gegevens moet hebben over de competities heen.

Echter, jij moet er mee werken; 't is alleen een methodiek die mij zwaar is tegen gevallen. :)
Gegevens uit andere competities halen is niet van toepassing bij deze opdracht... Dit is ook slechts de opdracht die ik heb meegekregen, dus moet het hiermee doen :)

Verwijderd

Topicstarter
ASP:
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
SQL = "SELECT * FROM indeling WHERE clubnummer=" & club & ";"
    rs.Open SQL,adoCon
    
    Do While Not rs.EOF
        poule = rs("poulenummer")
        plaatsingsnummer = rs("plaatsingsnummer")
    
        SQL2 = "SELECT * FROM wedstrijden WHERE poulenummer=" & poule & " AND thuisploeg=" & plaatsingsnummer & " OR poulenummer=" & poule & " AND uitploeg=" & plaatsingsnummer & " ORDER BY datum;"
        rs2.Open SQL2, adoCon
        
        Do While Not rs2.EOF
            speeldatum = rs2("datum")
            
            SQL3 = "SELECT * FROM wedstrijden WHERE poulenummer=" & poule & " AND thuisploeg=" & plaatsingsnummer & " OR poulenummer=" & poule & " AND uitploeg=" & plaatsingsnummer & " ORDER BY datum;"
            rs3.Open SQL2, adoCon
            
            If rs3("datum") = speeldatum Then
                Response.Write(rs3("wedstrijdnummer") & "  ")
                Response.Write(rs3("datum") & "<br>")
            Else
            End If
                        
            rs3.Close
            rs2.MoveNext
        Loop
        
        rs2.Close
        rs.MoveNext
    Loop    
    
    rs.Close


Dit is de code die ik nu heb... Hiermee worden de wedstrijdnummers en de datum van wedstrijden uit de eerste speelronde weergegeven... Nu de overige wedstrijden nog! Iemand een idee hoe dat kan? (met de huidige technologieën :))

  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

Johan19 kijk nou eens naar een OUTER JOIN.
De tijd die je kwijt bent om dit even onder de knie te krijgen verdien je dubbel en dwars terug in de tijd die je anders extra zou moeten wachten in het uitvoeren van deze DRIE queries. :X ;)
Beetje overdreven uiteraard, maar de boodschap is denk ik wel duidelijk :)

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones

Pagina: 1