variable nr velden van meerder tabelen
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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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;
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;
Ingekort:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
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
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
Gewijzigd op 22/09/2014 10:40:55 door Ger van Steenderen
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
Eventueel aangevuld met nog meer activiteiten.
Het aantal activiteiten kan 0 tot oneindig zijn. In de praktijk ±5
Jan
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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>';
?>
$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>';
?>
Gewijzigd op 22/09/2014 12:59:01 door Ger van Steenderen
Jan