Christian Seiler: Datum aus DB auslesen

Beitrag lesen

Hallo Dirk,

Ach so, hier noch die Erstellung der Tabelle:
$create6 = @mysql_query ("CREATE TABLE IF NOT EXISTS
auftrag (id INT(8) unsigned NOT NULL auto_increment,
dl LONGTEXT,
knr LONGTEXT,
annahme LONGTEXT,
PRIMARY KEY (ID))");

Bio hat Dir ja schon gesagt, dass Du einfach die falsche Variable genommen hast, allerdings möchte ich dennoch kurz auf Dein Datenbankdesign eingehen, insbesondere auf die Spaltentypen, denn da kann man in meinen Augen einiges verbessern:

»dl« ist vermutlich eine Beschreibung oder ein Titel. Es ist ok, dass Du deswegen ein Textfeld nimmst, allerdings dürfte VARCHAR(250) oder ähnlich ausreichend sein - TEXT und insbesondere LONGTEXT ist in meinen Augen Overkill für so ein Feld.

»knr« - damit meinst Du vermutlich die Kundennummer. Bei dem Feld ist zwar auch nichts daran auszusetzen, dass es ein Textfeld ist (numerische Felder kürzen z.B. führende Nullen) - allerdings stellt sich hier in meinen Augen die Frage, ob es überhaupt sinnvoll ist, die Kundennummer direkt in der Tabelle zu speichern - Du wirst ja schließlich noch eine separate Kundentabelle haben, die außer der Kundennummer (die für "außen" gedacht ist) noch eine id-Spalte hat - insofern wäre es sinnvoll, die id-Spalte der Kundentabelle hier einzutragen und die Kundennummer (und u.U. Namen etc.) dann über einen JOIN zu erhalten, wenn Du die Datenbank abfragst. Achja, und falls Du doch die Kundennummer direkt in der Tabelle speichern willst - nimm BITTE ein VARCHAR(10) oder VARCHAR(20) oder sowas - wenn bei der Beschreibung LONGTEXT schon Overkill ist, dann ist das hier definitiv der Fall.

»annahme« - das ist ganz klar ein Datumsfeld - MySQL bietet nämlich einen eigenen Datentypen für Datumsfelder an, die dafür gedacht sind, Datumswerte zu speichern.

Welchen Vorteil bringt es, spezialisierte Feldtypen anstelle von immer nur LONGTEXT zu verwenden?

* Speicherplatz - LONGTEXT braucht relativ viel Speicher in der Datenbank,
   auch wenn man nur wenig drin abspeichert.
 * Performance - LONGTEXT ist gegenüber "einfacheren" Datentypen wie
   DATE oder VARCHAR langsamer
 * Fehlererkennung - Wenn aus Versehen ein Script Amok läuft und irgend
   welchen Mist in die Datenbank reinschreiben will, dann wird es durch
   Restriktionen über das, was in die Felder reingeschrieben wird,
   eventuell davon abgehalten, eben diesen Mist zu tun.
 * Bei Feldern wie Datumsfeldern: Möglichkeit, bestimmte Datenbankfunktionen
   zu nutzen - z.B. funktioniert ORDER BY annahme DESC in Deinem obigen
   Beispiel nicht richtig, weil das Datum als Text in der Spalte drin
   steht (in Deinem Fall mit Tag zuerst), während bei einem Datumsfeld die
   Datenbank weiß, wie sie das Feld sortieren muss. Zudem kann man in
   der Datenbank auch Abfragen tätigen wie "Welche Datensätze gibt es denn
   zwischen dem 20.3.2007 und dem 25.3.2007?"

Die MySQL-Doku zu den verschiedenen Datentypen findest Du hier:
http://dev.mysql.com/doc/refman/5.1/de/data-type-overview.html

Viele Grüße,
Christian