Hi, Leute, ich habe gerade ein kleines aber unschönes Problem bei der Entwicklung eines Systems.
Es geht ALLGEMEIN darum, dass ich aus einer SQL Tabelle 2 Dinge nacheinander abfragen möchte:
1. eine gruppierte Liste aller Personen
2. Eine Liste aller Aufenthaltsorte zu den Personen
also
Vorher: Tabelle
ID | Name | Ort |
1 | Max Mustermann | Ort 1
2 | Max Mustermann | Ort 2
3 | Max Mustermann | Ort 3
4 | Herr Meier | Ort 3
5 | Herr Meier | Ort 2
6 | Herr Meier | Ort X
7 | Herr Heinrich | Ort 2
8 | Herr Heinrich | Ort 1
Nachher:
Max Mustermann: Ort 1, Ort 2, Ort 3
Herr Meier: Ort 3, Ort 2, Ort X
Herr Heinrich, Ort 2, Ort 1
---------------------------------------------------------------------------------
Bisher habe ich es velöst indem ich folgenden Code verwendet
ja, das ist etwas komplizierter, da das System noch mehr kann als die Allgemeine Darstellung. Aber es Funktioniert allgemein
der FEHLER ist nur, dass es die gelisteten $e_abt nicht nur dem "azubi" zuordnet, sondern beim 2. und 3. etx. durchlauf der While schleife immer die Ergebnisse der vorhergehenden Schleife komplett VOR das eigentliche Ergebniss packt.
Ich denke, das muss man doch irgendwie beheben können, oder?
IST-Fehler:
Max Mustermann: Ort 1, Ort 2, Ort 3
Herr Meier: Ort 1, Ort 2, Ort 3, Ort 3, Ort 2, Ort X
Herr Heinrich: Ort 1, Ort 2, Ort 3, Ort 3, Ort 2, Ort X, Ort 2, Ort 1
SOLL:
Max Mustermann: Ort 1, Ort 2, Ort 3
Herr Meier: Ort 3, Ort 2, Ort X
Herr Heinrich, Ort 2, Ort 1
__________________
Falls sich jemand die Mühe machen könnte, mal durchzuschauen, oder mir allgemein eine bessere Lösung für die allgemeine Problematik zu sagen, wäre ich sehr dankbar!
Es geht ALLGEMEIN darum, dass ich aus einer SQL Tabelle 2 Dinge nacheinander abfragen möchte:
1. eine gruppierte Liste aller Personen
2. Eine Liste aller Aufenthaltsorte zu den Personen
also
Vorher: Tabelle
ID | Name | Ort |
1 | Max Mustermann | Ort 1
2 | Max Mustermann | Ort 2
3 | Max Mustermann | Ort 3
4 | Herr Meier | Ort 3
5 | Herr Meier | Ort 2
6 | Herr Meier | Ort X
7 | Herr Heinrich | Ort 2
8 | Herr Heinrich | Ort 1
Nachher:
Max Mustermann: Ort 1, Ort 2, Ort 3
Herr Meier: Ort 3, Ort 2, Ort X
Herr Heinrich, Ort 2, Ort 1
---------------------------------------------------------------------------------
Bisher habe ich es velöst indem ich folgenden Code verwendet
PHP-Code:
if($action=="azubi") {
$result = $db->unbuffered_query("SELECT
DISTINCT e.azubi, f.*
FROM bb".$n."_events e
JOIN bb".$n."_userfields f
ON e.azubi = f.userid
ORDER BY f.field4");
while ($row = mysql_fetch_array($result)) {
$e_vorname = $row['field5'];
$e_name = $row['field4'];
$nummer = $row['azubi'];
$result2 = $db->unbuffered_query("SELECT
SUBSTRING(e.eventdate,1,4) AS year,
SUBSTRING(e.eventdate,6,2) AS month,
SUBSTRING(e.eventdate,9,2) AS day,
SUBSTRING(e.eventenddate,1,4) AS endyear,
SUBSTRING(e.eventenddate,6,2) AS endmonth,
SUBSTRING(e.eventenddate,9,2) AS endday,
e.*,gr.*
FROM bb".$n."_events as e
JOIN bb".$n."_groups as gr ON e.abteilung = gr.groupid
WHERE e.azubi = $nummer
ORDER BY year, month");
// ++++++ hier holt er die richtigen Daten, fügt aber leider die alten nachher vorn an
while ($row2 = mysql_fetch_array($result2)) {
$e_abt = $row2['title'];
$start = $row2['month'];
$end = $row2['endmonth'] ;
// ++++++ Aufenthaltsorte sollen so oft erscheinen, wie die Person in Monaten dort war
$diffdat1=GetTimeStamp($row2['eventenddate']);
$diffdat2=GetTimeStamp($row2['eventdate']);
$differenz = round(GetDayDiff($diffdat1,$diffdat2)/30.5,0);
for($count = 1; $count < $differenz; $count++)
{
$nummer2 = $nummer;
eval ("\$azubibit .= \"".$tpl->get("calendar_azubi_bit")."\";");
}
}
mysql_free_result($result2);
eval ("\$azubilist .= \"".$tpl->get("calendar_azubi_list")."\";");
}
mysql_free_result($result);
eval("\$tpl->output(\"".$tpl->get("calendar_azubi")."\");");
}
der FEHLER ist nur, dass es die gelisteten $e_abt nicht nur dem "azubi" zuordnet, sondern beim 2. und 3. etx. durchlauf der While schleife immer die Ergebnisse der vorhergehenden Schleife komplett VOR das eigentliche Ergebniss packt.
Ich denke, das muss man doch irgendwie beheben können, oder?
IST-Fehler:
Max Mustermann: Ort 1, Ort 2, Ort 3
Herr Meier: Ort 1, Ort 2, Ort 3, Ort 3, Ort 2, Ort X
Herr Heinrich: Ort 1, Ort 2, Ort 3, Ort 3, Ort 2, Ort X, Ort 2, Ort 1
SOLL:
Max Mustermann: Ort 1, Ort 2, Ort 3
Herr Meier: Ort 3, Ort 2, Ort X
Herr Heinrich, Ort 2, Ort 1
__________________
Falls sich jemand die Mühe machen könnte, mal durchzuschauen, oder mir allgemein eine bessere Lösung für die allgemeine Problematik zu sagen, wäre ich sehr dankbar!
Kommentar