2 mysqli in elkaar!
Weet iemand hoe ik twee query's kan laten zien in een resultaat. Ik het volgende:
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'
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
Dat kan met een JOIN, maar die is afhankelijk van hoe je de twee tabellen combineert.
Met andere woorden: hoe heb je de leden ondergebracht in groepen?
(Hint: daar is nog een derde tabel voor nodig. )
Met andere woorden: hoe heb je de leden ondergebracht in groepen?
(Hint: daar is nog een derde tabel voor nodig. )
Dat klopt ik heb de tabel 'leden_groepen'
leden_id
groepen_id
leden_id
groepen_id
Iets als:
Combineert alle leden met alle leden_groepen (op basis van leden_id) en met groepen (op basis van groep_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)
Ik had het zover al voor elkaar alleen ik weet niet hoe ik het overzicht dan ga krijgen met de groepen erachter?
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?!
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?!
Dit kan je eventueel oplossen in de PHP waar je de resultaten verwerkt.
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
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
Indien het ook mogelijk is dat een lid (tijdelijk) niet onderdeel uitmaakt van een groep kun je beter LEFT JOINs gebruiken anders wordt het lid in het geheel niet getoond.
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.
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




