für einen Kunden habe ich ein Kontaktformular eingerichtet, dessen Ergebnisse automatisch in einer MySQL-Datenbank in der Tabelle „form_results“ gespeichert werden.
Der Kunde wünscht jedoch, dass jeden Tag automatisch eine neue Tabelle mit dem aktuellen Datum erstellt wird und Kontaktanfragen des jeweiligen Tages in diese Tabelle wandern. Habt ihr eine Idee, wie ich diesen Wunsch umsetzen kann?
Des Weiteren habe ich noch eine kleine Frage: Wenn jemand im Kontaktformular beispielsweise als Wohnort Köln eingibt, dann steht dieses „Köln“ in der Tabelle als „Köln“. Wie kann ich dieses unschöne Ergebnis vermeiden?
Du kannst mit jedem Datensatz die MySQL-Funktion UNIX_TIMESTAMP() auführen und das ergebenis in der DB mitspeichern. Dann kannst du diesen Timestamp wieder aus der Db auslesen.
Einzelheiten findest du dazu in der MySQL Anleitung bzw. Google.
Und du solltest MySQL auf Unicode stellen, dann solltest du auch keine probleme mehr mit den Umlauten haben.
Also das Datum sowie die Uhrzeit wird in der Tabelle sowieso gespeichert. Jedoch hätte ich gerne, dass die tabelle automatisch das jeweilige Datum als Namen bekommt, so dass ich in der Datenbank für jeden tag eine extra tabelle habe.
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Also das Datum sowie die Uhrzeit wird in der Tabelle sowieso
gespeichert. Jedoch hätte ich gerne, dass die tabelle
automatisch das jeweilige Datum als Namen bekommt, so dass ich
in der Datenbank für jeden tag eine extra tabelle habe.
Mh… Aber das ist doch leicht irrsinnig?!? Ob du nun eingeben musst
SELECT col FROM table\_mit\_datum WHERE 1;
oder
SELECT col FROM table WHERE datum \> x AND datum
ist doch völlig egal. Auf deine Weise hast du eine Datenbank, die ihre Struktur verändert. Du musst in dein Programm routinen einbauen, die verhindern, dass auf eine Tabelle zugegriffen, die nicht existiert etc.
Mit der zweiten Abfrage zeigt er dir doch schon alle Datensätze zwischen x und y an (zB 01.01.2001 0:00 bis 01.01.2001 24:00). Damit hast du ganz easy die richtigen daten und findest diese auch immer an der selben Stelle.
Und wenn du dann doch mal eine Zusammenfassung über einen längeren Zeitraum brauchst, musst du nicht erst 365 Tabellen aneinanderfügen.
Glaube mir... Lass alle Daten in der einen Tabelle!
Wenn du dennoch für jeden Tag eine Tabelle haben willst, dann musst du das mit einem Programm lösen, dass abfragt, ob eine Tabelle für heute schon existiert und entsprechend ein CREATE TABLE Kommando absetzen.
Konstrukte wie CREATE TABLE TODAY() oder so ähnlich unterstützt MySQL mit an Sicherheit grenzender Wahrscheinlichkeit nicht, da man Rückgabewerte von MySQL-Funktionen nicht als Tabellennamen verwenden kann.
Grüße,
Alexander
Der Kunde wünscht jedoch, dass jeden Tag automatisch eine neue
Tabelle mit dem aktuellen Datum erstellt wird und
Kontaktanfragen des jeweiligen Tages in diese Tabelle wandern.
Habt ihr eine Idee, wie ich diesen Wunsch umsetzen kann?
Gibt’s in mySql den Begriff „dynamisches SQL“? Zumindest unter Oracle hab ich sowas mal gemacht (damals aber _nur_ Jahresweise, wobei das Prinzip dasselbe ist)
wie alle Vorredner schon betonten: „lass es besser“. Wenn es nur darum geht, die Tabelle nicht ins Uferlose wachsen zu lassen, würde sich u.U. eine Partitionierung der Tabelle nach dem Datumsattribut anbieten. Da hast du beide Vorteile (Aufteilung der Daten in ‚handliche‘ Portionen und die Möglichkeit, auf alle Daten unter einem gemeinsamen, fixen Namen zuzugreifen) in einer Lösung.