Toon posts:

SQL lastige "Join" vraag

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een database met 3 tabellen:

TabelA
  • ID
  • Productnaam
  • omschrijving
  • tabelnaam
TabelB
  • ID
  • lijstnaam
  • kolomnaam
  • tabelnaam
tabelnaam
  • ID
  • kolomnaam
Dus in tabelA staat het product omschreven,
in TabelB staat omschreven in welke kolom van tabelnaam wat staat omschreven,
in tabelnaam staat per kolom data.....

Dit kan ik niet veranderen, zo wordt de database gegenereert door een programma.

Het probleem is dat ik een formulier wil maken in excell en dat ik drie dropdown boxes wil maken (dropdown1, dropdown2, dropdown3) . De eerste lukt me, alleen het doorgeven van de geselecteerde waarde in dropdown1 aan dropdown2 wordt al lastig en dan Dropdown3 lukt me helemaal niet. Omdat ik dan de gevonden waarde uit Dropdown2 moet omzetten naar een kolomnaam..

  • Pete
  • Registratie: November 2005
  • Laatst online: 31-10-2025
Wat heb je al. Wat wil je precies in je dropdowns. Wil je dat we een query voor je maken of dat we de VBA code schrijven (beide een beetje behorend tot de categorie scriptrequest)

petersmit.eu


Verwijderd

Topicstarter
Ik heb mijn vraag wat te snel gesteld, hieronder het nieuwe overzicht:

TabelA

* ID
* Productnaam
* omschrijving
* tabelnaam

TabelB

* ID
* lijstnaam
* kolomnaam (bijvoorbeeld A, B, C, D)
* tabelnaam

tabelnaam

* Tijdstip
* A
* B
* C
* D

Er zit dus geen harde koppeling tussen de tabellen, ik kan wel een query maken op TabelA en TabelB op basis van "tabelnaam" maar dan houdt het op.

IN PHP heb ik domweg 3 pagina's gemaakt waarbij pagina 1 de selectie uit tabelA doorgeeft aan pagina2 en die de selectie uit tabelB weer aan pagina 3. Maar het is erg omslachtig en zou beter moeten en kunnen. Een JOIN (/INNER JOIN of anders) wil niet omdat de data in TabelB.kolomnaam niet verbonden kan worden met tabelnaam's kolommen.

De vraag is niet hoe het script eruit moet gaan zien, maar hoe ik databasetechnisch de verbinding maak tussen de verschillende tabellen.

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Je moet geen vaste query bouwen, maar eentje waarin de kolomnaam variabel is.

code:
1
String sql = "Select veld1, veld2 " + veld3naam + " from tabel where dit=dat";

Siditamentis astuentis pactum.


  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 11:41

Salandur

Software Engineer

ik zou je ontwerp toch anders maken, zodat je 1 tabel hebt met daarin die 'tabelnaam':

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
TabelA
* ID
* Productnaam
* omschrijving
* naam

TabelB
* ID
* lijstnaam
* kolomnaam (bijvoorbeeld A, B, C, D)
* naam

overzicht
* naam
* Tijdstip
* A
* B
* C
* D

hierdoor wordt de join natuurlijk een stuk eenvoudiger

Assumptions are the mother of all fuck ups | iRacing Profiel


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 17-12-2025

curry684

left part of the evil twins

Wat een ranzig datamodel :X D'r wordt metadata geplaatst tussen de data zelf, oftewel de verticale scheiding der niveaus wordt hier horizontaal tussen de tabellen ingezet. Typisch ik-ben-afgestudeerd-maar-stiekem-snap-ik-er-nog-niet-veel-van datamodel :/

Uberhaupt gaan kolomnamen A, B, C en D tegen iedere basale vorm van normalisatie in. Als je die laatste tabel nou gewoon pivot zoals het hoort:
code:
1
2
3
4
5
overzicht
* naam
* tijdstip
* type
* data

Zijn al je joinproblemen meteen opgelost. Overcomplexe joins en queries komen vrijwel altijd uit een (extreem) fout datamodel zoals deze.

Professionele website nodig?


Verwijderd

Topicstarter
Bedankt voor de reacties, maar zoals gezegd ik kan geen invloed uitoefenen op de databaseconstructie en heb ik hem ook niet bedacht.

Je moet het je als volgt voorstellen: (LET OP FICTIEF)

TabelA: bevat gegevens van aandelen en in welke tabel de gegevens staan
TabelB: bevat gegevens over de verschillende beursen en in welke kolom van de tabel de beurskoers staat
tabelnaam: bevat de koers per tijdstip voor de verschillende beursen

Omdat niet alle aandelen op alle beursen verhandeld worden en de opname momenten (tijdstippen) per aandeel kunnen varieren heeft elk aandeel zijn eigen tabel en verschillen de kolommen per aandeeltabel.

pfff, hoop dat het duidelijk is... :)

Waar het mij omgaat is een beetje hulp in de goede richting over hoe aan te pakken.

Maak ik een soort startquery waarbij ik een array bouw van alle mogelijke combinaties of ...?

Einddoel is dus 3 dropdownboxes (kan in PHP, VBA of whatever gemaakt worden) waarbij ik dus
1. het aandeel kies
2. de beurs kies
3. een datum selectie maak.

  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 11:41

Salandur

Software Engineer

dan kan je het gewoon niet met een join doen, maar moet je het met 3 losse queries op lossen.

Assumptions are the mother of all fuck ups | iRacing Profiel


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 17-12-2025

curry684

left part of the evil twins

Joins zijn bedoeld voor goed opgezette databases, niet voor dit soort gedrochten. Je zal dus idd met losse queries moeten werken.

Professionele website nodig?


Verwijderd

Topicstarter
Dan kom ik weer bij het begin terug. Hoe krijg ik de, met een dropdown of listbox, geselecteerde variabele uit TabelA.kolom in de volgende query voor de tweede dropdown of listbox?
Pagina: 1