Hallo,
ich möchte mit PHP / MYSQL einen Veranstaltungskalender realisieren. Jedes Event kann an mehreren Locations stattfinden, und jede Location kann mehrere Events anbieten - oder denselben Event mehrmals. Dazu habe ich nun 3 Tabellen, die erste enthält Details zur Location, die zweite enthält Details zum Event und die dritte Tabelle verknüpft die beiden anderen und liefert gleichzeitig das Datum, an dem der Event stattfindet:
tbl_events(
id,
name
)
tbl_locations(
id,
name
)
tbl_programm(
id,
event_id,
location_id
datum
)
Nun hätte ich unter anderem als Ergebnis einer Datenbankabfrage gern eine Liste der folgenden Form:
Event 1: Location A, Location B
Event 2. Location A, Location C, Location D
Ich möchte also einerseits die Events gruppieren, andererseits zu jedem Event die entsprechenden Locations anzeigen. Leider gelingt es mir bisher nicht, dieses Ergebnis in einer eleganten und möglichst Ressourcen schonenden Abfrage zu erzielen. Mein Problem ist, dass bei einer Gruppierung der Events jeweils immer nur eine Location agezeigt wird - lasse ich die Gruppierung aber weg, habe ich ein und denselben Event mehrmals in der Liste. Deshalb behelfe ich mir momentan mit diesem Provisorium:
// 1. Anfrage liefert die Events ...
$query = mysql_query("
SELECT * FROM tbl_events, tbl_locations, tbl_programm
WHERE tbl_programm.event_id = tbl_event.id
AND tbl_programm.location_id = tbl_locations.id
GROUP BY tbl_events.id")
while($ar = mysql_fetch_array($query))
{
// ... 2. Anfrage liefert für jeden Event die Locations
$subquery = mysql_query("SELECT name FROM tbl_locations, tbl_events, tbl_programm
WHERE tbl_locations.id = tbl_programm.location_id
AND tbl_events.id = tbl_programm.event_id
AND tbl_events.id = '".$ar["tbl_events.id"]."'")
$location = "";
while($ars = mysql_fetch_array($subquery))
{
$location-name .= $ars["name"].", ";
}
}
// ... und hier wird das dann zusammen gebaut.
Das finde ich aber ziemlich unschön. Vor allem wird für jeden Event eine neue Datenbankabfrage gestartet. Gibt es eine Möglichkeit, die Abfrage zu optimieren und eleganter, v.a. Ressourcen schonender zu demselben Ergebnis zu kommen?
Danke für eure Geduld und Hilfe!
S.