[mssql] FK met meerdere results

Pagina: 1
Acties:

  • siepeltjuh
  • Registratie: Maart 2003
  • Niet online
Misschien komt het door mijn gebrek aan kennis, misschien komt het doordat het gewoon niet kan, maar in ieder geval kon ik er niets over vinden :P

Zouden jullie eens kunnen kijken naar het voglende probleem:

Situatie:

Ik heb een tabel met computer configuraties, en aparte tabellen met geheugen, hardeschijven etc.

Het voorbeeld van mijn probleem is wat ingekort, om het duidelijk te houden.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
computers
+-----------+
| comp_id   |pk
| comp_naam |
| comp_merk |
| comp_type |
+-----------+

ref_c_m
+-----------+
| comp_id   |pk
| mon_id    |pk
+-----------+

monitor
+----------+
| mon_id   |pk
| mon_naam |
| mon_merk |
| mon_type |
+----------+

Een computer kan meerdere monitoren bevatten.
Echter heb ik inmiddels een query gebakken waarmee 1 monitor wordt toegevoegt aan de resultaten, maar hoe voeg ik een evt. tweede monitor toe?
code:
1
2
3
4
5
6
7
8
SELECT 
    *
FROM
    computers
LEFT JOIN 
    ref_c_m ON computers.comp_id = ref_c_m.comp_id
Left JOIN
    monitor ON ref_c_m.mon_id = monitor.mon_id


Het alternatief is dat ik 1 query doe met alle computers, en dan voor iedere pc apart een tweede query om de monitoren toe te voegen. Dit werkt wel, maar bij 100 computers
zou ik dan 100 queries * (1(hard disk) +1(monitor) +1(cdrom) +1(nic) +1(voeding)) etc
Dan heb je het al snel over meer dan 1000 queries voor 1 lijstje. Wat uitermate beroerd is voor de performance.

Overigens gebruik ik PHP als scripting taal (niet echt relevant, maar toch)

Can`t live without the mods


  • whoami
  • Registratie: December 2000
  • Laatst online: 18:08
Waarom een left join ?

Je relatie tabel zorgt voor de koppeling tussen computer en monitor. Gewoon een join op die tabellen dus zou gewoon je resultaat moeten geven waarbij je alle pc's ziet met al hun gekoppelde monitoren.

Maar ik begrijp niet waarom je spreekt over 'toevoegen' als je een select doet ?

Ik denk dat jij je layout al door SQL wil laten bepalen, en dat moet je gewoon niet doen. Met SQL moet je je data ophalen, en hoe je die data dan presenteert moet je -in jouw geval dan- met PHP doen.

https://fgheysels.github.io/


  • siepeltjuh
  • Registratie: Maart 2003
  • Niet online
Een left join, omdat het ook mogelijk is dat een pc geen monitor heeft, en met innerjoin krijg je dan geen resultaten.

Met invoegen bedoel ik dat hij de 2 rijen monitoren toevoegt aan de rij met computer gegevens.

Ik zit nog even te kijken, maar hoe krijg ik dat met een join eruit?
De opmaak / presentatie is geen punt, het gaat er om dat er met 1 query de benodigde data uit de db wordt gehaald, op dit moment lukt me dat niet.

Can`t live without the mods


  • whoami
  • Registratie: December 2000
  • Laatst online: 18:08
Met de query die je gepost hebt, zou het moeten lukken, of ik moet scheel zien.
Je hebt wel die gegevens goed in je DB zitten ?

https://fgheysels.github.io/


  • siepeltjuh
  • Registratie: Maart 2003
  • Niet online
Die query werkt ook wel.

Situatie 1: Computer heeft geen monitor
Resultaat 1: Alleen computer gegevens in resultaat

Situatie 2: Computer heeft een monitor
Resultaat 2: Computer gegevens en 1x monitor gegevens

Situatie 3: Computer heeft meerdere monitoren
Resultaat 3: Computer gegevens en 1x monitor gegevens

Probleem is dus dat de 2e monitor nooit in de resultaten zit, en ik geen idee heb hoe ik die toevoeg.

Als ik dezelfde join nog een keer uitvoer maar dan onder een alias, dan krijg ik natuurlijk 2x dezelfde monitor gegevens.

Can`t live without the mods


  • whoami
  • Registratie: December 2000
  • Laatst online: 18:08
Hoe zijn die tabellen dan opgevuld ? Dan moet er daar iets fout zitten imo.

https://fgheysels.github.io/

Pagina: 1