stefaan
01-03-2004, 21:38
Servus!
Ich habe für einen Veranstaltungskalender eine Datenbank, die jeweils eine 1:n Abfrage zu Referenten und Kontakte bereitstellt, d.h. zu jedem Termin sind mehrere Referenten/Kontakte möglich.
Derzeit geht das mit 3 Abfragen (Termine, Referenten, Kontakte), die ich so sortieren kann, dass ich sie in jeweils in ein Array bekomme:
$termine[$i]
$kontakt[$i][$j]
$referenten[$i][$j]
Mit Smarty kann ich dann eine schöne Auflistung aller Termine erstellen.
Nur wenn ich die Terminabfrage ganz vorne beginne, dann kann ich die Kontakte/Referenten nicht mehr richtig zuordnen, da mir das ganze verrutscht.
SQL für Termine ($termine)
SELECT t_termine.id AS termin_id,
t_termine.titel AS termin_titel,
t_termine.start,
[..]
FROM t_termine, t_orte, ...
WHERE t_orte.id = t_termine.ort
AND t_termine.arg1 = $arg1
AND t_termine.arg2 = $arg2
AND t_termine.start >= CURRENT_DATE
ORDER BY t_termine.start ASC, termin_id ASC
SQL für Kontakte ($kontakte), Referenten ($referenten) ist ziemlich ident:
SELECT t_referenten.id AS referenten_id,
t_referenten.vorname AS referenten_vorname,
t_referenten.nachname AS referenten_nachname,
[...]
FROM t_referenten, t_termine, t_term_ref
WHERE t_referenten.id= t_term_ref.referenten
AND t_term_ref.termine = t_termine.referenten
AND t_termine.arg1 = $arg1
AND t_termine.arg2 = $arg2
AND t_termine.start >= CURRENT_DATE
ORDER BY t_termine.start ASC, termine_id ASC
Die Zuordnung $termine[$i] und $refernten[$i] erfolgt so:
while ($row = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
if($row['termine_id'] == $termine[$i]['termin_id']) {
$referenten[$i][$j]['referenten_id'] = $row['referenten_id'];
[...]
$j++;
}
else {
$i++;
$j=0;
if($row['termine_id'] == $termine[$i]['termin_id']) {
$referenten[$i][$j]['referenten_id'] = $row['referenten_id'];
[...]
$j++;
}
else {
echo "<!--Fehler bei der Zuordnung, Referenten (ID):" . $row['termine_id']. $row['referenten_nachname'] . "-->\n";
}
}
}
Das funktioniert, solange alle 3 Abfragen einen gleichen Beginnzeitpunkt haben, sprich, nicht, wenn ich die erste Abfrage limitiere.
Gibts da eine sinnvolle Möglichkeiten, eine Ausgabe von z.B. 10 Datensätzen pro Seite zu liefern, ohne die Abfrage rekursiv gestalten zu müssen?
Danke!
Grüße, Stefan
Ich habe für einen Veranstaltungskalender eine Datenbank, die jeweils eine 1:n Abfrage zu Referenten und Kontakte bereitstellt, d.h. zu jedem Termin sind mehrere Referenten/Kontakte möglich.
Derzeit geht das mit 3 Abfragen (Termine, Referenten, Kontakte), die ich so sortieren kann, dass ich sie in jeweils in ein Array bekomme:
$termine[$i]
$kontakt[$i][$j]
$referenten[$i][$j]
Mit Smarty kann ich dann eine schöne Auflistung aller Termine erstellen.
Nur wenn ich die Terminabfrage ganz vorne beginne, dann kann ich die Kontakte/Referenten nicht mehr richtig zuordnen, da mir das ganze verrutscht.
SQL für Termine ($termine)
SELECT t_termine.id AS termin_id,
t_termine.titel AS termin_titel,
t_termine.start,
[..]
FROM t_termine, t_orte, ...
WHERE t_orte.id = t_termine.ort
AND t_termine.arg1 = $arg1
AND t_termine.arg2 = $arg2
AND t_termine.start >= CURRENT_DATE
ORDER BY t_termine.start ASC, termin_id ASC
SQL für Kontakte ($kontakte), Referenten ($referenten) ist ziemlich ident:
SELECT t_referenten.id AS referenten_id,
t_referenten.vorname AS referenten_vorname,
t_referenten.nachname AS referenten_nachname,
[...]
FROM t_referenten, t_termine, t_term_ref
WHERE t_referenten.id= t_term_ref.referenten
AND t_term_ref.termine = t_termine.referenten
AND t_termine.arg1 = $arg1
AND t_termine.arg2 = $arg2
AND t_termine.start >= CURRENT_DATE
ORDER BY t_termine.start ASC, termine_id ASC
Die Zuordnung $termine[$i] und $refernten[$i] erfolgt so:
while ($row = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
if($row['termine_id'] == $termine[$i]['termin_id']) {
$referenten[$i][$j]['referenten_id'] = $row['referenten_id'];
[...]
$j++;
}
else {
$i++;
$j=0;
if($row['termine_id'] == $termine[$i]['termin_id']) {
$referenten[$i][$j]['referenten_id'] = $row['referenten_id'];
[...]
$j++;
}
else {
echo "<!--Fehler bei der Zuordnung, Referenten (ID):" . $row['termine_id']. $row['referenten_nachname'] . "-->\n";
}
}
}
Das funktioniert, solange alle 3 Abfragen einen gleichen Beginnzeitpunkt haben, sprich, nicht, wenn ich die erste Abfrage limitiere.
Gibts da eine sinnvolle Möglichkeiten, eine Ausgabe von z.B. 10 Datensätzen pro Seite zu liefern, ohne die Abfrage rekursiv gestalten zu müssen?
Danke!
Grüße, Stefan