[SQL][PHP] Datensätze zusammenfassen

Floletni

Commander
Registriert
Sep. 2007
Beiträge
2.355
Ich habe zwei Probleme. Ich arbeite gerade an einem System was Vorgänge aufzeichnet. Aufgezeichnet wird eine Administrations-Weboberfläche für Datensätze.

Sobald ein Eintrag geändert wird, wird ein Eintrag in die Datenbank gemacht. Nach folgenden Muster:

Name wer was gemacht hat; Was gemacht wurde; An welchen Datensatz; Datum; Uhrzeit

1. Wenn jetzt 4 mal Frau Maier was geändert hat und Herr Müller 2 Datensätze hinzugefügt hat, hätte die Datenbank 6 Einträge. Um nicht immer in die Datenbank zu schauen, bastelle ich mir dafür eine Oberfläche zusammen. Per dropdown-Feld wird einen dann die Möglichkeit gegeben nach entsprächenden Einträgen zu suchen.

Klappt auch alles wunderbar. Nur ein Haken hat die ganze Sache: In mein Dropdown-Feld steht jetzt jeder Eintrag, der in der Datenbank steht, zur Auswahl. Um beim Beispiel zu bleiben 6. Wenn Frau Maier und Herr Müller nun arbeitswütig sind, erstellen und ändern um die 200 Datensätze. Mein Dropdownmenü würde also auch 200 Datensätze anzeigen. Obwohl ich nur die 2 (Beispiel)Sachbearbeiter zur Auswahl haben will. Mit anderen Worten, wenn ein Mitarbeiter schon ausgegeben wurde, soll er nicht nochmal erscheinen (als Auswahlmöglichkeit).

Wie kann ich sowas zusammenführen? Ich habe schon gegoogelt, aber nichts passendes gefunden

2. Sollen die Einträge nach einer Gewissen Zeit hinaus geworfen werden. Ich habe jetzt als Beispiel eine Woche genommen. Eigentlich keine schwere Sache. Nur kurz vor Feierabend nach einem anstregenden Tag sehe ich den Fehler nicht mehr und stehe nur noch aufm Schlauch :(

Das hab ich versucht mit dem Ergebnis das alle aufgezeichneten Vorgänge weg waren.
Code:
$loesch = "DELETE FROM beispieltabelle WHERE datum<".(time()-60*60*24*7);
mysql_query ($loesch);

Wenn ihr was an meiner Erklärung nicht verstanden habt, ruhig Fragen.
 
Zu 2.:
Du hast in den Einträgen zuvor time() in Datum und Uhrzeit getrennt. Jetzt suchst du aber in Datum nach einem Timestamp, der in diesem Format nicht vorhanden ist (gehe ich jetzt mal davon aus).
 
Zuletzt bearbeitet:
zu 1.:
vllt. distinct und erstmal nur die Namen listen?

@crykiller
War auch meine erste Idee aber dann hat er afaik immer noch die ganzen
Einträge im Dropdown
 
Zuletzt bearbeitet:
Hi Zu 1)

Da könntest du bei der Abfrage für das Dropdown Menü den SQL Befehl "Group By" nehmen.

Also "select user from xxx where xx.yy = tt GROUP BY user"

Zu 2)

Hab das jetzt mals aus einem meiner Projekte rauskopiert.

Tabelle heisst halt newsletter_job und mein Datumsfeld ist start.


$mysqldate = date( 'Y-m-d H:i:s', $timestamp );
'SELECT * FROM newsletter_job WHERE start < "'.$mysqldate.'";'

Hoffe das hilft dir so.

Gruß
 
Ich glaube das Problem bei 1. ist für ihn, dass er erstmal die verschiedenen Bearbeiter erfassen muss.
 
Eine Möglichkeit das du erstmal nur die Namen die was geändert haben in einem Drop-Down Menü angezeigt werden. Wenn dann ein Name ausgewählt ist, lädst du per Ajax die einträge nach.

Ansonsten wäre es sicher auch möglich, dass du die ergebnisse erst Client-Seitig mit JavaScript aufbereitest und auch wieder über Dictionarys gehst.

Falls deine Oberfläche in Java, C# oder ner anderen Hochsprache geschrieben ist, dann kannst du gleich alle Datensätze laden, alle in ein Dictionary mit dem Namen als Key und dann nur die Keys im Drop-Down-Menü anzeigen lassen.
 
zu 1. "Select distinct Sachbearbeiter" spuckt Dir nur jeden Sachbearbeiter 1x aus, auch wenn dieser mehrfach in der Tabelle steht.
 
Verstehe zu deiner ersten Frage nicht ganz das Problem, du könntest doch die Datensätze noch dem jeweiligen Sachbearbeiter zuweisen und dann getrennt ausgeben?

LG, Dalson
 
Danke @crykiller

Dein Tipp hat geholfen. Sieht jetzt so aus:

Code:
$mysqldate = date( 'd.m.y', time()-60*60*24*7);
$loesch = "DELETE FROM beispieltabelle WHERE datum<"$mysqldate;
mysql_query ($loesch);

@Dalson

Ich gebe per DropdownFeld eine Auswahl vor. Im nächsten Schritt frage ich meine Datenbank dann was der gewählte Sacharbeiter gemacht hat.

@se7en2
Das mit dem DESTINCT werde ich morgen mal ausprobieren. Erstmal gehst nach Hause.
 
Zu 2) Man könnte es auch komplett in SQL machen:
PHP:
$loesch = "DELETE FROM beispieltabelle WHERE datum < DATE_SUB(CURDATE(), INTERVAL 1 WEEK)";
mysql_query($loesch);
Das finde ich persönlich auch etwas übersichtlicher, als mit den Sekunden herum zu rechnen.
 
Neuer Tag neues Glück. Das DISTINCT hat wirklich Wunder geholfen. Genau nach sowas hab ich gesucht.

@Scheppat
Ich bin zwar gern offen um was neues zu lernen. Nur mit Zeitangaben von SQL her zu arbeiten habe ich noch nicht gemacht. In Zukunft werde ich sowas auch nicht sehr oft nutzen müssen. Genau deswegen reicht mir das in der PHP-Form.

Edit: Ergänzung vom 13.05.11 um 11:52

Danke nchmal die mir mit ihren Ratschlägen weiter geholfen haben. :)
 
Zuletzt bearbeitet:
Zurück
Oben