Toon posts:

[MySQL] rijen naar kolommen bij select

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb de volgende tabellen:

code:
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
Deelnemers       

+----+----------+------+
| id | voornaam | klas |
+----+----------+------+
...
+----+----------+------+
| 4  | Hans     |  H4A |
+----+----------+------+

 Activiteiten

 +----+--------------+----------+
 | id | naam         | jaarlaag |
 +----+--------------+----------+
 | 1  | springkussen | V5       |
 +----+--------------+----------+
 | 2  | survival     | H4       |
 +----+--------------+----------+
 | 3  | zwemmen      | B3       |
 +----+--------------+----------+
 | 4  | muziek       | V5       |
 +----+--------------+----------+

Koppeltabel

+------+------+
| d_id | a_id |
+------+------+
...
+------+------+
|  4   |  3   |
+------+------+
|  4   |  1   |
+------+------+
|  4   |  2   |
+------+------+


Ik wil nu met een query het volgende resultaat krijgen:

code:
1
2
3
4
5
 +----+------+--------------+---------+----------+----------+
 | id | naam | springkussen | zwemmen | muziek   | survival |
 +----+------+--------------+---------+----------+----------+
 | 4  | Hans | 1 (TRUE)     | 1 (TRUE)| 0 (FALSE)| 1 (TRUE) |
 +----+------+--------------+---------+----------+----------+


Onderstaande query heb ik zelf al geconstrueerd:

code:
1
2
3
4
5
6
7
8
9
10
11
SELECT
    d.id,
    d.naam,
    a.naam as act_naam
FROM deelnemers as d
    LEFT JOIN activiteiten as a
        ON(a.id IN (SELECT k.activiteit_id
                   FROM koppeltabel as k
                   WHERE d.leerlingnummer = k.leerlingnummer
                   )
          )


Het resultaat dat ik hiermee krijg is van deze vorm:

code:
1
2
3
4
5
6
7
8
9
 +----+------+--------------+
 | id | naam | act_naam     | 
 +----+------+--------------+
 | 4  | Hans | springkussen |
 +----+------+--------------+
 | 4  | Hans | survival     |
 +----+------+--------------+
 | 4  | Hans | zwemmen      |
 +----+------+--------------+


Het probleem is dus dat ik de namen van de activiteiten als kolom-naam wil krijgen met boolean-waardes erin. Ik heb al in de mysql-documentatie gezocht op boolean maar bijna elk resultaat had betrekking op de Fulltext-zoekfunctie.

Desnoods zou een query met onderstaande als resultaat genoeg zijn:

code:
1
2
3
4
5
 +----+------+--------------+
 | id | naam | activiteiten |
 +----+------+--------------+
 | 4  | Hans | 3,2,1        | 
 +----+------+--------------+


Mijn eigenlijk doel is dat ik maar één rij per deelnemer heb waar ik ook uit kan halen aan welke activiteiten zei deelnemen.

Ik heb verder me rot gezocht op google maar het probleem is dat ik geen steekwoorden kan bedenken waar ik dit probleem mee kan aanduiden ( woorden als collumn en row geven ontelbaar onrelevante resultaten ).
Ik hoop dat er hier iemand is die me kan helpen!

PS. Ik weet dat ik ook mbv php uiteindelijk kan krijgen wat ik via mysql wil doen. Toch zou ik graag een oplossing in SQL willen vinden.

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Het probleem is dat SQL bedoeld is om data op te halen, niet om het te presenteren.
Een simpele outer join levert je de benodigde data, in de programmeertaal waarmee je werkt kun je dit vervolgens op deze manier laten presenteren.

Who is John Galt?


Verwijderd

Als je met een nieuwe versie van MySQL werkt (4.1+), zoek dan eens op GROUP_CONCAT, daarmee kan je de waarden van een links gejoinde tabel automatisch laten samenplakken.