Users-groenten tabel is de koppeling tussen de users tabel en de groenten tabel. User 1 kan 6, 12 of 20 groenten kiezen die gekoppeld worden aan zijn/haar id. Als je ingelogd bent dan zie je in je zaaiplan deze groenten die bij jouw id horen plus de kalender voor het oogsten en de bijbehorende recepten.
copilot heeft een uitleg gegeven over een SQL-query met het voorbeeld van een studenten db en cursussen db. Ik heb gevraagd hoe ik de cursussen per jaar kan weergeven per student.
SELECT studenten.naam AS StudentNaam, cursussen.naam AS CursusNaam, YEAR(studenten.inschrijfdatum) AS Jaar FROM studenten JOIN studenten_cursussen ON studenten.student_id = studenten_cursussen.student_id JOIN cursussen ON cursussen.cursus_id = studenten_cursussen.cursus_id WHERE studenten.student_id = 1 ORDER BY Jaar;
SELECT studenten.naam AS StudentNaam, cursussen.naam AS CursusNaam, YEAR(studenten.inschrijfdatum) AS Jaar
naam uit de tabel studenten en geeft het een alias (StudentNaam) voor duidelijkheid in het resultaat.naam uit de tabel cursussen en geeft het een alias (CursusNaam).inschrijfdatum in de tabel studenten en geeft het een alias (Jaar). De functie YEAR() haalt alleen het jaargedeelte van de datum op.
FROM studenten
studenten.
JOIN studenten_cursussen ON studenten.student_id = studenten_cursussen.student_id
JOIN cursussen ON cursussen.cursus_id = studenten_cursussen.cursus_id
studenten met de tussentabel studenten_cursussen op basis van de student_id kolom, waardoor we de bijbehorende inschrijvingen van de student kunnen ophalen.studenten_cursussen met de tabel cursussen op basis van de cursus_id kolom, waardoor we de bijbehorende cursusinformatie kunnen ophalen.
WHERE studenten.student_id = 1
student_id = 1 worden opgehaald. Dit zorgt ervoor dat we specifiek de cursussen van die ene student bekijken.
ORDER BY Jaar;
Jaar). Hierdoor worden de cursussen die de student heeft gevolgd, geordend weergegeven per jaar van inschrijving.Deze query haalt de naam van een specifieke student (met student_id = 1), de namen van de cursussen die de student volgt, en het jaar waarin de student is ingeschreven voor die cursussen op. Vervolgens sorteert het de resultaten op jaar.
De search functionaliteit om recepten te zoeken heb ik stap voor stap gemaakt met een link naar de groenten database: klik hier voor het stappenplan.
De groenten heb ik uit de database gehaald en per categorie weergegeven in tabs. Klik hier voor het stappenplan. Zorg dat je wel ingelogd bent, anders werkt de link niet.
Copilot heeft een uitleg gegeven over het uitvoeren van meerdere SQL-queries in 1 keer. Voor het updaten van de voorkeuren en het toevoegen van de geselecteerde groenten hebben we meerdere sql-queries nodig:
1. UPDATE users voor de naam, jaar en grootte
2. DELETE FROM users-groenten van opgeslagen voorkeuren
3. INSERT INTO users-groenten voor de nieuwe voorkeuren
Het was ingewikkeld om te maken maar uiteindelijk snap ik wel hoe het werkt.
// Start transactie
$link->begin_transaction();
try {
// Eerste update query
$sql1 = "UPDATE users SET voornaam = ?, achternaam = ?, year = ?, size = ?, updated_at = ? WHERE id = ?";
$stmt1 = $link->prepare($sql1);
if (!$stmt1) {
throw new Exception("Fout bij voorbereiding statement 1: " . $link->error);
}
$stmt1->bind_param("sssssi", $voornaam, $achternaam, $selected_year, $selected_size, $updated_at, $id);
if (!$stmt1->execute()) {
throw new Exception("Fout bij uitvoering statement 1: " . $stmt1->error);
}
// Verwijder bestaande groenten van de gebruiker
$sqlDelete = "DELETE FROM users_groenten WHERE id = ?";
$stmtDelete = $link->prepare($sqlDelete);
if (!$stmtDelete) {
throw new Exception("Fout bij voorbereiding statement voor verwijderen: " . $link->error);
}
$stmtDelete->bind_param("i", $id);
if (!$stmtDelete->execute()) {
throw new Exception("Fout bij uitvoering statement voor verwijderen: " . $stmtDelete->error);
}
// Voeg geselecteerde groenten toe
$sqlInsert = "INSERT INTO users_groenten (id, groenten_id) VALUES (?, ?)";
$stmtInsert = $link->prepare($sqlInsert);
if (!$stmtInsert) {
throw new Exception("Fout bij voorbereiding statement voor toevoegen: " . $link->error);
}
foreach ($selected_grntn as $groenten_id) {
$stmtInsert->bind_param("ii", $id, $groenten_id);
if (!$stmtInsert->execute()) {
throw new Exception("Fout bij uitvoering statement voor toevoegen: " . $stmtInsert->error);
}
}
// Commit transactie
$link->commit();
//echo "Gegevens succesvol bijgewerkt!";
// Redirect to welcome page
header("location: welcome.php");
} catch (Exception $e) {
// Rollback transactie bij een fout
$link->rollback();
echo "Fout bij het bijwerken van gegevens: " . $e->getMessage();
}
Op de welcome.php pagina wil ik een gepersonaliseerd zaaiplan weergegeven met afbeeldingen. De data komt uit de users-groenten tabel
Op de welcome.php pagina wil ik een gepersonaliseerde oogstkalender weergegeven. De data komt uit de users-groenten tabel
Op de welcome.php pagina wil ik recepten weergegeven die bij de geselecteerde groeten horen. Deze groenten zijn het hoofdingrediënt.