2 mysqli in elkaar!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT id, voornaam, achternaam FROM leden";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Naam: " . $row["voornaam"]. " " . $row["achternaam"]. " - Groep: " . $row["groep"]. "<br>";
}
} else {
echo "0 results";
}
$conn->close();
?>
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT id, voornaam, achternaam FROM leden";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Naam: " . $row["voornaam"]. " " . $row["achternaam"]. " - Groep: " . $row["groep"]. "<br>";
}
} else {
echo "0 results";
}
$conn->close();
?>
Maar ik heb nog een tweede tabel die bestaat uit in welke groep de leden zitten. En ze kunnen in meerdere groepen zitten.
1. Piet Mulder - Rekenen
2. Kees Mulder - Rekenen - Tekenen
3. Karel Mulder - Tekenen - Geschiedenis
Alleen weet ik niet hoe ik dat voor elkaar kan krijgen?
Tweede tabel is 'groepen' en bestaat uit 'groep_id' en 'groep'
Gewijzigd op 11/01/2016 09:50:45 door Kees Mulder
Ik adviseer je om eerst te gaan kijken hoe je een database normaliseert, na normalisatie gaat het een stuk gemakkelijker
Met andere woorden: hoe heb je de leden ondergebracht in groepen?
(Hint: daar is nog een derde tabel voor nodig. )
leden_id
groepen_id
Code (php)
1
2
3
2
3
SELECT id, voornaam, achternaam, groep FROM leden
JOIN leden_groepen ON leden.id=leden_groepen.leden_id
JOIN groepen ON leden.groep=groepen.groep_id
JOIN leden_groepen ON leden.id=leden_groepen.leden_id
JOIN groepen ON leden.groep=groepen.groep_id
Combineert alle leden met alle leden_groepen (op basis van leden_id) en met groepen (op basis van groep_id)
1. Piet Mulder - Rekenen
2. Kees Mulder - Rekenen - Tekenen
3. Karel Mulder - Tekenen - Geschiedenis
Moet dat met een extra select uit de tabel of iets met foreach oid? Dat stuk weet ik niet hoe ik dat moet doen?!
Ook kun je kijken of GROUP_CONCAT een oplossing biedt. https://www.percona.com/blog/2013/10/22/the-power-of-mysqls-group_concat/ of http://www.w3resource.com/mysql/aggregate-functions-and-grouping/aggregate-functions-and-grouping-group_concat.php
Gewijzigd op 11/01/2016 14:11:47 door Jan de Laet
Als ik mij niet vergis levert de query van Jan mogelijk meerdere keren eenzelfde lid op, maar met verschillende groepen, zoals hij aangeeft krijg je alle combinaties terug. Elke combinatie is een record. Bij het doorlopen van de resultaten zou je dus bij kunnen houden van welk lid je gegevens weergeeft. Betreft het een ander lid: begin een nieuwe regel (en houd bij dat dit het "huidige" lid is), betreft het eenzelfde lid toon dan enkel een groep bij het huidige lid.
EDIT: de laatste suggestie van Jan is waarschijnlijk een stuk simpeler. Maar let op randgevallen zoals leden die niet tot een groep behoren, als dit mogelijk is.
Gewijzigd op 11/01/2016 14:13:31 door Thomas van den Heuvel