Mit ‘Abfrage’ getaggte Artikel

MySQL – leeren/löschen von einer Tabelle mit DELETE FROM und TRUNCATE

Montag, 05. Dezember 2011

MySQL LogoManchmal lassen sich verschiedene Aktionen und Abfragen unter MySQL mittels einer zusammenfassenden Abfrage erledigen. Beispiel dafür ist wenn wir den Inhalt von einer Tabelle löschen wollen und damit gleich den AutoIndex resetten wollen. Denn das sind zwei verschiedene MySQL Operationen/Abfragen, die wir auch kombinieren können – nämlich in einer zusammenfassender Abfrage.

Heute werden wir verdeutlichen wie Datensätze aus MySQL Tabellen ordnungsgemäß gelöscht werden und wie komplette MySQL geleert werden können (vom englisch – truncate). Darüber hinaus werden wir etwas mehr Licht auf MySQL AutoIndex werfen.

Löschen von Datensätzen von MySQL Tabellen mit DELETE FROM

Um Datensätze von einer MySQL Tabelle zu löschen, sieht die Abfrage so aus:

DELETE FROM `IHRE_TABELLE` [optional WHERE Klausel]

Anmerkungen:

  • Bitte, achten Sie darauf, dass man kein Sternchen nach dem MySQL Wort “DELETE” setzt, im Gegensatz zu SELECT. Also DELETE * FROM ist vollkommen inkorrekt
  • ACHTUNG: Wenn keine WHERE Klausel hinzugefügt wird, so werden sämtliche Datensätze gelöscht
  • Achten Sie auf die umschließende Zeichen für die Tabelle. Wenn diese nicht vorhanden sind, so wird MySQL versuchen, den von Ihnen genannten Tabellennamen zu parsen. Beispiel – sowas funktioniert nicht: DELETE FROM meine-tabelle WHERE id=1auftrund des Bindestriches. Richtig wäre DELETE FROM `meine-tabelle` WHERE id=1.

Der MySQL AutoIndex von dieser Tabelle wird nicht zurückgesetzt, was bedeutet das?
Das bedeutet, dass der interne Zähler, der sagt was die nächste kleinstmögliche ID ist, noch die höchste ID + 1 enthält, die bisher in diese Tabelle hinzugefügt worden ist. Lesen Sie mehr über den AutoIndex und wie Sie ihn nachträglich resetten können.

Leeren einer MySQL Tabelle mit Zurücksetzung von AutoIndex mit TRUNCATE

Wenn wir alle Datensätze von einer Tabelle löschen, so nutzt uns nichts einen großen AutoIndex zu haben, wir wollen doch von 1 anfangen (natürlich nur falls wir eine auto_increment Spalte haben). In diesem Fall nehmen wir eine andere MySQL Abfrage:

TRUNCATE TABLE `IHRE_TABELLE`

Fazit

Sie können mit zwei Abfragen bestimmte oder alle  Datensätzen einer Tabelle löschen und dann den AutoIndex zurücksetzen. Jedoch, wenn Sie eine Tabelle komplett leeren wollen, so sollten Sie immer TRUNCATE nehmen.

Brauchen Sie Hilfe bei Ihren MySQL Abfragen oder Programmierung, kommen Sie nicht weiter? Wir stehen Ihnen jederzeit zur Verfügung – E-Mail use-media oder direkt anrufen 02161 177747

MySQL gruppierte/ausgeblendete Datensätze nach Gruppierung beibehalten mit GROUP_CONCAT

Donnerstag, 17. November 2011

Haben Sie sich die Frage gestellt – Wir gruppieren mit MySQL und was passiert mit den ganzen Werten, die in Spalten stehen, nach denen wir nicht gruppieren? Diese werden unter Umständen einfach durch die GROUP BY Klausel ausgeblendet. Manchmal möchten wir Sie aber behalten und sogar in einer bestimmten Reihenfolge. Anbei eine Erklärung, wie wir Werte von einer Gruppieren beibehalten können – mit MySQL Programmierung und die Funktion GROUP_CONCAT.

Ausgangsbasis

Wir haben folgende Tabelle:

ID    Zimmer         BesucherID
1       100             1
2       101             1
3       105             2

Wenn wir folgenden Befehl ausführen, um nach BesucherID mit MySQL GROUP BY zu gruppieren, so führen wir folgende Abfrage aus:

SELECT COUNT(*) as cnt, Zimmer, BesucherID FROM Tabelle GROUP BY BesucherID

Wir bekommen daraufhin einen solchen Ergebnis:

cnt    Zimmer BesucherID
2        100         1
1        105         1

Was passiert aber mit sämtlichen Zimmerangaben? Hier bekommen wir einen zufälligen Wert, der sich auf die BesucherID bezieht.

Problemstellung

Nach Gruppierung mit MySQL möchten wir ggf. ausgeblendete Daten beibehalten und nicht nur per Random einen zufälligen Wert geliefert bekommen, wenn wir die Spalte selektieren.

Lösung

MySQL bietet die schöne Funktion GROUP_CONCAT, mit denen wir alle durch die Gruppierung ausgeblendeten Werte pro Spalte erhalten können. So lautet die Abfrage:

SELECT COUNT(*) as cnt, GROUP_CONCAT(Zimmer), BesucherID FROM Tabelle GROUP BY BesucherID

Hierbei bekommen wir folgendes Ergebnis:

cnt     Zimmer       BesucherID
2         100,101      1
1          105            1

Diese Funktion ist sehr nützlich, insbesondere wenn Sie durch die Gruppierung MIN oder MAX Werte suchen und Ihre korrespondierende Angaben direkt sehen wollen. Genau das zu tun, können Sie auch die Reihenfolge der Werte bestimmen, die durch GROUP_CONCAT in einer kommagetrennte Liste gezählt werden. So wird das gemacht mit GROUP_CONCAT und ORDER BY:

SELECT COUNT(*) as cnt, GROUP_CONCAT(Zimmer ORDER BY BesucherID), BesucherID FROM Tabelle GROUP BY BesucherID

Fazit

Wir hoffen, dass Sie sich mit dieser Funktion einige Zeit sparen konnten. Falls Ihnen der Beitrag gefällt, so nutzen Sie bitte den Gefällt mir Facebook Button.
Brauchen Sie Hilfe, kommen Sie nicht weiter? Wir stehen Ihnen zur Verfügung – 02161 / 177747 oder E-Mail.

Zeichenketten oder Felderwerte mit MySQL CONCAT verknüpfen/verketten

Mittwoch, 02. November 2011

MySQL ist eine mächtige Sprache, die sehr oft PHP Programmierern sehr viel Arbeit abnehmen kann. Dies gilt für diverse Berechnungen, die manchmal mit PHP langsamer erledigt werden können, denn es sind weitere Programmierschritte notwendig. Heute werden wir betrachten wir verschiedene MySQL Felderwerte mit weiteren Feldern oder Zeichenketten verknüpft werden können. Dies hilft uns direkte und fertige Werte für unsere PHP Programmierung bereit zu halten oder diverse Sortier- oder Gruppieraktionen durchzuführen.

Problematik

Betrachten wir eine MySQL Tabelle USERS mit folgenden Feldern: ID, Vorname, Nachname. Nun sehen wir wie wir einen kompletten Namen direkt von MySQL erhalten können.

Lösung

SELECT CONCAT(Vorname,Nachname) as Vollname FROM USERS ORDER BY Vollname

Wir haben soeben mit MySQL die Tabelle so abgefragt, dass wir ein Ergebnis mit lediglich einer Spalte bekommen – Vollname. Diese Spalte würde für Werte Thomas und Müller folgenden Wert enthalten – ThomasMüller. Dies ist aber kein korrektes Format, in diesem Fall für einen Namen. Nun können wir die Abfrage so erweitern:

SELECT CONCAT(Vorname,' ',Nachname) as Vollname FROM USERS ORDER BY Vollname

Wir haben eine Zeichenkette noch dazu durch MySQL verknüpfen lassen. Hiermit bekämen wir Thomas Müller.

Fazit

Es gibt zwei sehr interessante und nützliche Aspekte zu diesem Thema:

  • Sie können so viele Felder und/oder Zeichenketten verbinden, wie Sie wollen
  • Sie können beliebige Trenn- oder andere Zeichen verketten. Diese müssen Sie einfach mit einem Komma trennen

Brauchen Sie professionelle Hilfe für Ihre Programmierungen oder MySQL Abfragen? Wir sind für Sie da – zögern Sie nicht mit uns per E-Mail oder telefonisch – 02161 / 177747 – Kontakt aufzunehmen.