Resultaten uit een sql query die in een rij weergegeven worden in een kolom weergeven

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jo Immanuel

Jo Immanuel

29/08/2013 12:52:46
Quote Anchor link
Beste forumleden,

Zoals sommigen van jullie onderhand al wel weten ben ik bezig met het maken van een competitie.
Maar nu ben ik weer eens aan het klooien met SQL.

Punt is dat ik een tabel heb met opstellingen. In deze tabel staan per wedsrijd (record) meerdere foreign keys (spelerID's) die verwijzen naar de dezelfde primary key van tabel spelers. Das niet erg handig voor het maken van de joins, maar het is me (misschien wat omslachtig) gelukt:

Dit is mijn sql-query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Select st1.achternaam as st1,
       st2.achternaam as st2,
       st3.achternaam as st3,
       st4.achternaam as st4,
       st5.achternaam as st5,
       st6.achternaam as st6,
       st7.achternaam as st7,
       st8.achternaam as st8,
       st9.achternaam as st9,
       st10.achternaam as st10,
       st11.achternaam as st11
From tbl_opstellingen_wissels o
inner join tbl_spelers st1 on o.spelerID1thuis = st1.spelerID
inner join tbl_spelers st2 on o.spelerID2thuis = st2.spelerID
inner join tbl_spelers st3 on o.spelerID3thuis = st3.spelerID
inner join tbl_spelers st4 on o.spelerID4thuis = st4.spelerID
inner join tbl_spelers st5 on o.spelerID5thuis = st5.spelerID
inner join tbl_spelers st6 on o.spelerID6thuis = st6.spelerID
inner join tbl_spelers st7 on o.spelerID7thuis = st7.spelerID
inner join tbl_spelers st8 on o.spelerID8thuis = st8.spelerID
inner join tbl_spelers st9 on o.spelerID9thuis = st9.spelerID
inner join tbl_spelers st10 on o.spelerID10thuis = st10.spelerID
inner join tbl_spelers st11 on o.spelerID11thuis = st11.spelerID
Where wedstrijdID = '1'


Maar nu krijg ik als resultaat het volgende:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
st1     st2     st3     st4     st5     st6     st7     st8     st9     st10     st11
Coutinho     Malone     Wormgoor     Beugelsdijk     Meijers     Jansen     Visser     Toornstra     Chery     Vicento     Poepon


Dus alle resultaten in een rij (wat natuurlijk wel logisch is). Maar ik wil de resultaten onder elkaar krijgen.

Weet iemand of dit te bewerkstelligen is?

Toevoeging op 29/08/2013 13:13:56:

PS: Of is het gewoon een kwestie van slecht databaseontwerp/normalisatie? Had ik een extra koppeltabel moeten gebruiken ("ktbl_opstelling_spelers" waarin bij elk record 1 speler (spelerID) met 1 opstelling (opstellingID) wordt verbonden)???
Gewijzigd op 29/08/2013 12:55:08 door Jo Immanuel
 
PHP hulp

PHP hulp

29/04/2024 18:49:51
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

29/08/2013 17:01:55
Quote Anchor link
Dat laatste inderdaad.
 
Jo Immanuel

Jo Immanuel

29/08/2013 17:19:39
Quote Anchor link
Hmm. Dat is niet zo mooi...

Ik heb onlangs van 1 seizoen alle opstellingen van elke wedstrijd in mijn database gezet. Dus in tabel opstellingen voor elke wedstrijd 11 basisspelers (spelerID's) + wisselspelers (spelerID's) voor zowel de uit- als de thuisclub. Tja, dat was dus een enorm pokkewerk om in te voeren. Dat begrijp je waarschijnlijk wel.

Dus als het even kan wil ik daar geen veranderingen meer in aanbrengen.

Ik zou natuurlijk voor elke speler uit de opstelling een aparte (simpele) select-query kunnen maken en die middels php kunnen plaatsen op mijn website, maar dan worden het een hoop verschillende queries + PHP-acties en dat kan bijna niet goed zijn voor de snelheid en de onderhoudbaarheid.

Is er geen enkele mogelijkheid om de resultaten van mijn query in plaats van naast elkaar onder elkaar te krijgen?
 
Erwin H

Erwin H

29/08/2013 17:44:15
Quote Anchor link
Met andere woorden je gaat liever nu op de foute weg door en bijt liever later door de zure appel heen, dan dat je nu door die zure appel heen bijt. Vroeg of laat zal je dat toch moeten doen....
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

29/08/2013 17:49:46
Quote Anchor link
Ja, je kan die losse query's ook aan elkaar plakken met union.
Maar dan blijf je nog steeds met een slecht model zitten.
Maar je kan dit ook eenmalig doen, door een nieuwe tabel te maken en dan met Insert into ... select die tabel vullen.
 
Jo Immanuel

Jo Immanuel

29/08/2013 19:15:50
Quote Anchor link
Ik heb van te voren lang en goed nagedacht over mijn database-inrichting. Mijn gedachte was: je hebt een tabel 'spelers' en je hebt een tabel 'wedstrijden'. De tabel 'opstellingen' koppelt de unieke ID's van de spelers aan de unieke ID's van de wedstrijden. Is de tabel 'opstellingen' dan zelf niet al een koppeltabel?

Kortom: wat heb ik dan fout gedaan? Had ik in de tabel opstelling een aparte record moeten maken voor iedere speler in plaats van een aparte record voor iedere wedstrijd (en daar meerdere spelerID's in)?

Maar goed, stel ik ga op de huidige weg door, wat voor concrete problemen ga ik daar dan later nog allemaal van krijgen? Want dat is voor mij dan wel belangrijk in die afweging. Ik zie namelijk ook een aantal voordelen van mijn huidige, blijkbaar niet helemaal correcte, database-inrichting.



Toevoeging op 29/08/2013 20:27:06:

PS: Bedankt trouwens Ger. Wederom ben jij mijn reddend engeltje.

Het is me gelukt om met behulp van "union" 11 kleine sql-querietjes bij elkaar te gooien en err 1 lange query van te maken.

Wel wat nadelig voor de performance helaas. Bij mijn eerste query waren er slechts 0.0009 secondes nodig om 11 resultaten uit te poepen. Voor hetzelfde aantal resultaten maar dan onder elkaar met de union doet ie er vijf keer zo lang over (0.0045 secondes).

Dat zal wel het eerste nadeel van mijn database-inrichting wat beteft opstellingen zijn. Maar zijn er nog meer?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.