Hoi,

ik heb meerdere tabellen welke ik wil samenvoegen in 1 query.
Tabel 1 is een simpele lijst met de namen en adressen. Hier moet ik alle records van hebben

Leden:
id autonummer
Naam, voornaam,... varchar

Tabel 2 zijn activiteiten Hier moeten dus alle activiteiten van terug komen
ActList:
ID autonummer
datum date
ActNaam varchar

Er is een tussenliggende tabel welke bepaald wie meedoet aan welke activiteit
Activiteiten:
Lid int(11) NOT NULL,(id van het lid)
DoetMee tinyint(1) NOT NULL,
Act int(11) NOT NULL(id van de activiteit)

Hoe kan ik een lijst hebben van Alle leden met alle activiteiten waaraan ze wel of niet meedoen.

Jan
Met deze code maak ik een lijst van mijn leden

SELECT 
	ID, 
	trim(voornaam), 
	trim(achternaam), 
	trim(straat), 
	trim(huisnummer), 
	postcode as pc, 
	gemeente as stad, 
	DATE_FORMAT(geboortedatum, "%d-%m-%Y") AS datum, 
	DATE_FORMAT(LidSinds, "%d-%m-%Y") AS LidSinds, 
	ShowAdres, 
	showTel, 
	ShowEmail,
	functie, 
	DATE_FORMAT(NOW(), "%Y") - DATE_FORMAT(geboortedatum, "%Y") - (DATE_FORMAT(NOW(), "00-%m-%d") < DATE_FORMAT(geboortedatum, "00-%m-%d")) AS age, 
	land, 
	actief 
FROM leden;
Met een cross join 'hang' je alle activiteiten aan alle leden, daarna kan je met een left join op activiteiten bepalen of er wel of niet meegedaan wordt, of het nog niet bekend is (mijn interpretatie van jouw bedoeling met de doetmee kolom)

Ingekort:

SELECT
	l.achternaam,
	al.actnaam,
	CASE a.doetmee
		WHEN 1 THEN 'Ja'
		WHEN 0 THEN 'Nee'
		ELSE 'onbekend' END doetieut
FROM
	Leden l
CROSS JOIN
	ActList al
LEFT JOIN
	Activiteiten a
	ON l.id = a.lid AND al.id = a.act

Ger,

Bedankt voor het snelle antwoord.
resultaat is er echter nog niet. ik heb 1 lijn per lid/activiteit.
Ik zou 1 rec moeten hebben per Lid

Naam	|Act1	|act2
Jan	|Ja	|Nee
piet	|Jan	|Ja
Joris	|Nee	|Ja


Eventueel aangevuld met nog meer activiteiten.
Het aantal activiteiten kan 0 tot oneindig zijn. In de praktijk ±5

Jan
Er zijn oplossingen voor om het in de query te doen, maar persoonlijk geef ik er de voorkeur aan om het in php te doen:

<?php
$pointer = '';
$counter = 0;
$head = '';
$body = '<tbody>';
$tr = '';
while($row = $pdo->fetch(PDO::FETCH_ASSOC)) {
	if($row['achternaam'] != $pointer) {
		$counter++;
		if($counter == 1) {
			$head = '<thead><tr><td>Naam<td>';
		}
		$pointer = $row['achternaam'];
		$body .= $tr . '<tr><td>' . $pointer . '<td>';
		$tr = '</tr>';
	}
	if ($counter == 1) {
		$head .= '<td>' . $row['actnaam'] . '</td>';
	}
	$body .= '<td>' . $row['doetieut'] . '</td>';
}
echo '<table>' . $thead . '</tr></thead>' . $tbody . '</tr></tbody></table>';
?>
Ok bedankt. Dan laat ik het ook in PHP. Ik wou het gewoon wat versnellen.

Jan

Reageren