Gästebuch - Letzte Einträge

Keine Einträge vorhanden!

Besucher

Heute23
Gestern34
Diese Woche97
Diesen Monat714
Total44833

1
Online

Mittwoch, 21. August 2019 14:06

Da ich nun auch anfange mich in Datenbankabfragen einzulesen bzw einzuarbeiten, stößt man zwangsläufig auf Hürden, die für einen Anfänger unüberwindbar scheinen.... Datetime ist so ein Ding, mit diesem ominösen UTC....

Ich parke das mal hier für alle mitleidenden ;)

DATE_FORMAT(CONVERT_TZ(MAX(>tabelle mit dem Datum<), 'UTC','Europe/Berlin'), '%Y-%m-%d %H:%i:%s')

 

Diese Zeile sagt folgendes aus:
- DATE_FORMAT ist der spezifizierte Zeitformat
- CONVERT_TZ(*Datum*,*von*'(UTC)', *nach*'gewünschte Zeitzone') -> hier habe ich als Datum: MAX(TABELLE) ausgewählt weil ich von mehreren Daten das aktuellste brauche.
- zum Schluß noch die Form der Ausgabe '%Y-%m-%d %H:%i:%s' ergibt z.B.: 2011-09-07 22:47:51 die aber noch zum DATE_FORMAT (2. Parameter) gehört.

sieht dann so aus:

SELECT DATE_FORMAT(CONVERT_TZ("2011-09-07 22:55:51", 'UTC','Europe/Berlin'), '%Y-%m-%d %H:%i:%s') AS "Zeit"
;

 

So siehts dann fertig bei mir aus:

SELECT >tabelle< AS Name, COUNT(>tabelle<) AS Anzahl, DATE_FORMAT(CONVERT_TZ(MAX(>tabelle<), 'UTC','Europe/Berlin'), '%Y-%m-%d %H:%i:%s') AS "letzter Beitrag vom"
 FROM >tabelle<
 INNER JOIN >tabelle< ON (>tabelle< = >tabelle<)
 WHERE Name <> "ohne diesen Namen"
 GROUP BY name
 ORDER BY Anzahl DESC

 

Hier geht es darum aus 2 Tabellen (Usern und Beiträgen) den Namen, die Anzehl der erstellten Beiträge und das Datum + Uhrzeit des zuletzt erstellten Beitrages auszugeben.

//Abfrage in eine CSV-Datei mit Überschrift speichern
//Hier beginnt die Überschrift
SELECT "Überschrift 1", "Überschrift 2", "Überschrift 3", ....
UNION
//Hier endet die Einbettung der Überschrift
//Damit die Überschriften nicht in die Werte sortiert werden, wird alles folgende in runde Klammern gesetzt
(SELECT spalte1, spalte2, spalte3, ....
INTO OUTFILE "Pfad, z.b.: c:/xampp/mysql/beispiel.csv"
FIELDS TERMINATED BY ";"
ENCLOSED BY '"'
ESCAPED BY "\\"
LINES TERMINATED BY "\n"
FROM Tabellenname
WHERE spalte1 = "was auch immer"
GROUP BY spalte1, spalte2, spalte3, ....
ORDER BY spalte1)
//Diese Abfrage ohne die Hinweise starten, sonst hagelt es Fehler ;)
//Also hier nochmal zusammenhängend:
SELECT "Überschrift1", "Überschrift2", "Überschrift3", "Überschrift4", ....
UNION
(SELECT spalte1, spalte2, spalte3, ....
INTO OUTFILE "c:/xampp/mysql/beispiel.csv"
FIELDS TERMINATED BY ";"
ENCLOSED BY '"'
ESCAPED BY "\\"
LINES TERMINATED BY "\n"
FROM Tabellenname
.....)

//Nach "from Tabellenname" können noch alle Argumente folgen, die zur Abfrage wichtig sind
//egal ob Where, group by, order by ...... etc, wie oben zu sehen. Nur nicht vergessen, die Klammer zum Schluß ggf zu schließen.

 

 

Manchmal ist es sinnvoll Zwischensummen zu erstellen, mit dem Befehl WITH ROLLUP kann man das realisieren.

Das sieht dann so aus:

SELECT spalte1, IFNULL(spalte2,"Bezeichnung 1") AS spalte2, IFNULL(spalte3,"Bezeichnung 2") AS spalte3, ....
FROM tabellenname
GROUP BY spalte1, spalte2, spalte3 WITH ROLLUP

 

Wichtig zu erwähnen ist, das man kein ORDER BY mehr verwenden kann. Wenn man das Ergebnis sieht, ist es aber auch schnell deutlich warum.

Ich habe die Anweisung IFNULL(spalte, "Bezeichnung") mit angegeben, da sonst alle leeren Spaltenzeilen mit dem NULL Wert gefüllt werden. das sieht unschön aus. Wer es sehen möchte, lässt die o.a. Anweisung weg und schreibt stattdessen nur den Spaltennamen, also z.B.: spalte . Da ich in der regel in der ersten Apalte die Zahlenwerte habe, wird diese Spalte immer gefüllt sein, deswegen spare ich mir die IFNULL Anweisung hier.