2 mysqli in elkaar!

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kees Mulder

Kees Mulder

11/01/2016 09:27:56
Quote Anchor link
Weet iemand hoe ik twee query's kan laten zien in een resultaat. Ik het volgende:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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();
?>


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
 
PHP hulp

PHP hulp

24/04/2024 13:11:50
 
Pipo Clown

Pipo Clown

11/01/2016 10:19:28
Quote Anchor link
Ik adviseer je om eerst te gaan kijken hoe je een database normaliseert, na normalisatie gaat het een stuk gemakkelijker
 
Ward van der Put
Moderator

Ward van der Put

11/01/2016 10:23:16
Quote Anchor link
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. )
 
Kees Mulder

Kees Mulder

11/01/2016 10:25:09
Quote Anchor link
Dat klopt ik heb de tabel 'leden_groepen'

leden_id
groepen_id
 
Jan de Laet

Jan de Laet

11/01/2016 12:11:06
Quote Anchor link
Iets als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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


Combineert alle leden met alle leden_groepen (op basis van leden_id) en met groepen (op basis van groep_id)
 
Kees Mulder

Kees Mulder

11/01/2016 13:50:59
Quote Anchor link
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?!
 
Jan de Laet

Jan de Laet

11/01/2016 14:09:59
Quote Anchor link
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
Gewijzigd op 11/01/2016 14:11:47 door Jan de Laet
 
Thomas van den Heuvel

Thomas van den Heuvel

11/01/2016 14:12:06
Quote Anchor link
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.
Gewijzigd op 11/01/2016 14:13:31 door Thomas van den Heuvel
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.