Tag: MySQL

CoSchni#9: Deutsches Datumsformat in MySQL Datenbank ablegen

Bevor das Datum aus der Datenbank gelesen werden kann, muss es natürlich erstmal abgespeichert werden. Das DD.MM.YYYY Datumsforamt muss in das MySQL kompatible Format umgewandelt werden, damit später die von MySQL angebotenen Zeitfunktionen genutzt werden können. Die unten stehende Funktion erwartet ein Datum im Format 24.12.2000 bzw. kann auch noch eine Zeitangabe im Format HH:MM:SS bzw. 09:30:15 mit übergeben werden.

[PHP]
static function GermanToMy($date, $time =””) {

$d = explode(“.”,$date);

return sprintf(“%04d-%02d-%02d”, $d[2], $d[1], $d[0]).$time;
}
[/PHP]

CoSchni#8: Datum von MySQL nach JavaScript konvertieren

Dynamische Seiten werden greifen häufig auf JavaScript zurück. Diagramme und Tabelle die auf der X-Achse ein Datumsbereich haben, bzw. eine Spalte mit Datum benötigen die Angabe dann in einem JavaScript kompatiblen Format, damit es korrekt sortiert bzw. angezeigt werden kann. Nachfolgend ein Code Schnippsel, welcher mittels PHP das Datum automatisch von MySQL-Format ins JavaScript-Format umwandelt.

[PHP]
static function MyToJS($time){

$peaces = explode(“-“,substr($time,0,10));

return $peaces[0].”, “.(int)$peaces[1].” -1, “.(int)$peaces[2];
}
[/PHP]

CoSchni#7: Datum von MySQL nach PHP konvertieren

Immer mal wieder müssen Datums- und Zeitangaben aus MySQL gelesen und in PHP bearbeitet oder zur Augabe gebracht werden. Dabei stellt sich grundsätzlich die Frage wie speichere ich das Datum- bzw. die Zeitangabe in der Datenbank. Aus meiner Sicht gibt es nur eine korrekte Antwort: Datum- und Zeitangaben sollten immer MySQL bzw. in dem Datenbank spezifischen Format gespeichert werden. Die Speicherung des UNIX-Timestamp oder anderer Formate erhöht spätestens beim Debuggen den Aufwand enorm. Zudem können, wenn MySQL das Datums-Format nicht unterstützt, keine der nützlichen Time-Funktionen von MySQL benutzt werden.

Nachfolgend eine Funktion, die den übergebenden MySQL-String umwandelt:

[PHP]
static function MyToPHP($time, $withminutes = FALSE){

$unixtime = strtotime($time);

if($withminutes){
$stamp = date( ‘d.m.Y H:i:s’, $unixtime );
}else{
$stamp = date( ‘d.m.Y’, $unixtime );
}

return $stamp;
}
[/PHP]

MySQL Formate sortieren 1:1 – 4:3 etc

Leinwand- bzw. Displayformate werden in 1:1, 4:3, 16:9 oder 21:9 angegeben. Aufgrund des Doppelpunktes sind dies Strings bzw. Text, womit die Sortierung i.d.R. wie folgt aussehen würde:

[PHP]
1:1
16:9
21:9
4:3
[/PHP]

erwarten würde man dagegen wahrscheinlich eher eine Sortierung wie die folgende:

[PHP]
1:1
4:3
16:9
21:9
[/PHP]

Von Quadrat nach Rechteck, sozusagen. Die ist mit folgendem MySQL Query möglich

[PHP]
ORDER BY substring( replace( Formate, ‘:’, ” ) , 0, 2 )
[/PHP]

Bei mehr Formaten sollte darüber nachgedacht werden, ggf. eine Spalte “Sorting” anzulegen und dort einfach nummerische Werte einzutragen. Falls ihr eine andere clevere Idee habt, wie solche Formate über MySQL automatisiert sortiert werden können, würde ich mich über einen Kommentar freuen.

Meine liebste MySQL 5 Neuerung

Gerade im Internet ist es wichtig, das man auf dem aktuellen Stand. Dies gilt besonders im Kontext mit Sicherheitslücken. Für Server Administratoren bedeutet dies jedoch auch einen erheblichen Mehraufwand, den man erstmal nicht bezahlt bekommt.

Mittlerweile gibt es aber auch viele Anwendungen die nach höheren Versionsnummer schreien. Als Administrator kann man entweder einen neuen Server mit der neuen Version aufsetzen oder den ganzen Server updaten und hoffen, dass später noch alles funktioniert.

Der Umstieg von MySQL 4 auf 5 und PHP 4 auf 5 hat relativ problemlos funktioniert. Besonders bei PHP wird es jedoch immer schwieriger die Altlasten mitzutragen. Die Version 6 von PHP wird deshalb nicht so einfach zu PHP 5 kompatibel sein. Entwickler werden hier gezwungen werden, ihre alten Gewohnheiten abzulegen und PHP vielleicht auf eine ganz neue Art und Weise zu programmieren.

Als Entwickler schreie ich mittlerweile schon nach MySQL 5. Man sollte meinen dies ist Standard, bei manchen Hosting Agenturen anscheinend jedoch noch nicht. Mein liebste Funktion, die erst seit MySQL 5 verfügbar ist heißt ON DUPLICATE KEY UPDATE. Eine fantastische Erleichterung, die es überall geben sollte.

Früher:
1. Schauen ob in der Datenbank ein entsprechender Schlüssel vorhanden ist.
2. Abhängig von 1 entscheiden ob ich INSERT oder UPDATE nehme
3a. Neuen Datensatz einfügen
3b. Vorhandenen Datensatz updaten

Heute:
1. Vorher überlegen, welche unterschiedlichen Werte der Datensatz bei INSERT oder UPDATE hat
2. Ein SQL Statement für beide Fälle schreiben

Beispiel:
[sql]
// a und b sind die Schlüsselattribute

INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;

// Quelle: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
[/sql]

Der Vorteil liegt hier eindeutig in der Performance. Man braucht nur noch eine Abfrage an die Datenbank absetzen. Man muss keine Fallunterscheidung implementieren. Man wird gezwungen sich sinnvolle Schlüsselattribute zu überlegen.