Hallo allemaal,

ik vraag mbv query gegevens op meerder tabellen.
Doel is om te tonen welke personen welke rol hebben. Echter het lukt me alleen om dit een platte lijst te tonen.
Dus resultaat is:

Rol 1 - persoon 1
Rol 1 - persoon 2
Rol 1 - persoon 3
Rol 2 - persoon 1
Rol 3 - persoon 1
Rol 3 - persoon 2
enz

Zo zie dat de rolnaan constant getoond wordt.
Wat ik graag zou willen is dat de lijst er ongveer zo uit te komt zien:

Rol 1 - persoon 1
- persoon 2
- persoon 3

Rol 2 - persoon 1

Rol 3 - persoon 1
- persoon 2

Hoe kan ik dit voor elkaar krijgen? Ik dacht iets met GROUP BY in mijn sql maar levert ook nog niet het gewenste resultaat op.


Voor de volledigheid mijn code:

	//------------------------------------------------------------------------ FUNCTIE DIDM contactpersoon
	function didmcontact (){
	global $connection;
			
		$sqlUitlezen = mysqli_query($connection, $sql = "
			SELECT 
				person.*,
				person2role.*,
				role.*
			FROM 
				person
			LEFT JOIN person2role ON person2role.MSKEYVALUE_MEDEWERKER = person.MSKEYVALUE_MEDEWERKER
			LEFT JOIN role ON role.MSKEYVALUE_ROL = person2role.MSKEYVALUE_ROL
			
			WHERE role.MSKEYVALUE_ROL LIKE 'ROLE:PROCES:DECENTRAAL IDM BEHEER%'
					
			ORDER BY role.ACHMEA_ROLETYPE ASC, role.MSKEYVALUE_ROL ASC			
			");
		
		$sqlAantal = mysqli_num_rows($sqlUitlezen);
		
		if ($sqlAantal > 0){
			echo '<article>';
			echo '<table id="customers">';
			echo '	<tr>';
			echo '	<td colspan="5" align="right"><h3>Aantal rollen gekoppeld ('.$sqlAantal.') ';
			echo '	</tr>';
			echo '  <tr>';
			echo '	<th nowrap><h4>DIDM Contactpersonen</h4></th>';
			echo '	<th colspan="2"><h4></h4></th>';
			echo '  </tr>';
			
			while ($sqlData = mysqli_fetch_assoc($sqlUitlezen)){	
			
			echo '  <tr>';
			echo '	<td><h5>'.$sqlData['MSKEYVALUE_ROL'].'</h5></td>';
			echo '	<td><h6>'.$sqlData['MX_FIRSTNAME'].' '.$sqlData['MX_LASTNAME'].'</h6></td>';
			echo '  </tr>';
			}
			echo '</table>'; 
			echo '</article>';
		}else{
			echo '<h4>Sorry, ik kan geen medewerker-rolkoppeling vinden!</h4>';
		}
	}
Dan gebruik je geen komma als separator, maar een leesteken dat niet in het veld voorkomt.
Vervolgens gebruik je dat teken om te exploden.
Adoptive Solution op 08/02/2019 20:31:50

maar een leesteken dat niet in het veld voorkomt.

Haha, hoe vaak ik daar al tegenaan gelopen ben ... Dan dacht iemand in het verleden een "onmogelijk" teken te gebruiken. Vervolgens kwam er een creatieveling langs, of gewoon iemand die geen Nederlands/Engels gebruikte, en dan zocht je jezelf de pleuris waarom de boel opeens niet meer werkte ...

@ Arien,

top solution hoor. prachtig resulaat. ik ga die op meerdere plekken doorvoeren.

thanks man.

[size=xsmall]Toevoeging op 09/02/2019 18:54:11:[/size]

nu zit ik nog struggelen in dit overzicht gegevens uit een 4e tabel te trekken. de 4e tabel bevat gegevens die wat vertellen over bijv. eigenaarschap van de rol. Daarbij ga ik tegen gelijknamige velden in meerdere rollen aanlopen (ik hebt ook niet bedacht) ... wellicht op te lossen met aliassen maar het valt me nog niet mee.. de query wordt steeds complexer :-).... en ik wil het ook nog 'ns gaan begrijpen.... pittige kost hoor.
Dan moet je een INNER JOIN gebruiken.
Dat dacht ik dus ook.... maar het is pittige kost... en voor mij nog niet zo vanzelfsprekend.
al die JOINS.... de keuze is reuze. Als in begin van dit topic kijkt zie je dat ik al gebruik van JOINS maak. Maar ik doorgrond het nog nog niet helemaal.

dus ik dacht het simpel te doen door er een tabel ou bij de plaatsen en nog een JOIN erbij en klaar is kees. Echter, niks is minder waar...

Mijn SELECT komt er dan zo uit te zien:

$sqlUitlezen = mysqli_query($connection, $sql = "
			SELECT 
				person.*,
				person2role.*,
				role.*
				ou.*
				
			FROM 
				person
			LEFT JOIN person2role ON person2role.MSKEYVALUE_MEDEWERKER = person.MSKEYVALUE_MEDEWERKER
			LEFT JOIN role ON role.MSKEYVALUE_ROL = person2role.MSKEYVALUE_ROL
			INNER JOIN ou ON role.ACHMEA_REF_OU = ou.MSKEYVALUE_OU
			
			WHERE role.MSKEYVALUE_ROL LIKE 'ROLE:PROCES:DECENTRAAL IDM BEHEER%'
					
			ORDER BY role.MSKEYVALUE_ROL ASC, person.MX_LASTNAME ASC			
			");


maar ja... mijn foutmelding komt er dan zo uit te zien:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\wamp64\www\bp\members\inc\plugin.php on line 766

dus ergens begrijp ik het nog niet... toch maar door blijven 'modderen'...

[size=xsmall]Toevoeging op 09/02/2019 20:07:30:[/size]

YeAH gelukt.... hierboven ook een komma vergeten te zetten... thnx
Dirk Huizinga op 09/02/2019 19:56:03

maar ja... mijn foutmelding komt er dan zo uit te zien:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\wamp64\www\bp\members\inc\plugin.php on line 766

dus ergens begrijp ik het nog niet... toch maar door blijven 'modderen'...

En dan blijf ik erbij dat PHP enkel aangeeft dat hij een boolean in de vorm van 'nee' terug krijgt. Dus moet je verder debuggen met [php]mysqli_error[/php] en kijken wat MySQL / MariaDB te zeggen heeft..

YeAH gelukt.... hierboven ook een komma vergeten te zetten... thnx

Mooi dat het gelukt is :-)

Reageren