Eigenes Projekt · Station 8 von 10
Regionale Event-Datenbank
Eine Webseite zum Stöbern in Veranstaltungen, Orten und Arten, mit Suche und Filtern, in PHP auf einer MySQL-Datenbank.

Ziel
Eine datenbankgestützte Webseite bauen, auf der man Veranstaltungen nach Kategorie, Art, Stadtteil und Zielgruppe findet.
Umsetzung
- Die Startseite hat zwei Reiter („TOP-Events“ und „Wohin am Wochenende“) und eine Suche mit Filtern nach Kategorie, Art, Stadtteil und Zielgruppe.
- Listen für Veranstaltungen, Veranstaltungsorte, Arten, Kategorien und Zielgruppen und eine Detailseite mit Ort und Preis.
- Die Daten liegen in einer MySQL-Datenbank mit rund 20 Tabellen. Die Abfragen mit Verknüpfungen über mehrere Tabellen sind in PHP mit mysqli geschrieben.
- Ursprünglich als Next.js-Projekt begonnen, später in PHP neu gebaut.
- Die Bilder zeigen die App mit Beispieldaten: erfundene Veranstaltungen und selbst gezeichnete Bilder statt der Fotos.

Code
Suche mit mehreren Filtern
if ($hasFilter) {
$sql = "SELECT
v.veranstaltung_id,
v.titel,
v.bild,
o.name AS location_name,
MIN(t.startzeit) as startzeit,
MIN(t.ausverkauft) as ausverkauft,
MIN(t.abgesagt) as abgesagt,
p.beschreibung AS preis_info
FROM veranstaltung v
LEFT JOIN veranstaltungsort o ON v.veranstaltungsort_id = o.veranstaltungsort_id
LEFT JOIN stadtteil s ON o.stadtteil_id = s.stadtteil_id
LEFT JOIN veranstaltungskategorie1 k ON v.veranstaltungskategorie1_id = k.veranstaltungskategorie1_id
LEFT JOIN veranstaltungsart1 a ON v.veranstaltungsart1_id = a.veranstaltungsart1_id
LEFT JOIN veranstaltung_zielgruppe vz ON v.veranstaltung_id = vz.veranstaltung_id
LEFT JOIN zielgruppe zg ON vz.zielgruppe_id = zg.zielgruppe_id
LEFT JOIN preiskategorie p ON v.preiskategorie_id = p.preiskategorie_id
JOIN termin t ON v.veranstaltung_id = t.veranstaltung_id
WHERE t.startzeit >= NOW()";
if ($searchTerm) $sql .= " AND v.titel LIKE '%$searchTerm%'";
if ($category) $sql .= " AND k.bezeichnung LIKE '%$category%'";
if ($type) $sql .= " AND a.bezeichnung LIKE '%$type%'";
if ($location) $sql .= " AND o.name LIKE '%$location%'";
if ($district) $sql .= " AND s.bezeichnung LIKE '%$district%'";
if ($audience) $sql .= " AND zg.bezeichnung LIKE '%$audience%'";
$sql .= " GROUP BY v.veranstaltung_id ORDER BY startzeit ASC";
$searchResults = mysqli_query($link, $sql);
if (!$searchResults) $errorMsg = "DB Error: " . mysqli_error($link);
}Aus den ausgefüllten Filtern wird die Abfrage Stück für Stück zusammengesetzt; die Treffer sind nach dem nächsten Termin sortiert.
Was ich gelernt habe
Eine Datenbank mit vielen Beziehungen abzufragen: Verknüpfungen über mehrere Tabellen, gruppierte Termine und Suchfilter.