Archiv für die Kategorie ‘Datenbanksysteme/MySQL’

Tutorial: Mit PHPMyAdmin und einer Abfrage MySQL Tabelle erzeugen

Mittwoch, 16. Januar 2013

In einem ausführlichen Artikel über MySQL wird in unserem Blog gebloggt wie man eine MySQL Tabelle erstellen kann. Es werden die Schnittstelle und die zugehörigen Einstellungen unter PHPMyAdmin unter die Lupe genommen und anschließend wird die Abfrage zur Erzeugung einer MySQL Tabelle erläutert. Die Feinheiten der Operation bezüglich der anzulegenden Indizen werden auch erklärt und die bewährte Praktiken werden genannt. (weiterlesen …)

MySQL – nach einer Abfrage betroffene Datensätze mit PHP ermitteln

Donnerstag, 22. März 2012

Im Gegensatz zu SELECT MySQL Abfragen, wo Sie nach einer Abfrage eine Sammlung von Datensätzen bekommen und ganz genau wissen wie viele diese sind, wissen Sie das bei UPDATE und DELETE Abfragen nicht direkt. Manchmal möchten Sie anhand der Anzahl der betroffenen Datensätze einer UPDATE oder DELETE MySQL Abfrage wissen, ob Sie die Abfrage richtig ausgeführt hatten. Dafür gibt es eine spezielle Funktion von PHP, die Ihnen hilft die betroffenen Datensätze zu zählen und zu interpretieren.

Aufgabe – Ermittlung der betroffenen Datensätze nach einer MySQL Abfrage mit PHP

Um das zu tun, müssen Sie unmittelbar nach Ihrer UPDATE oder DELETE MySQL Abfrage, folgende PHP Funktion aufrufen:

echo mysql_affected_rows();

Ausgedruckt wird die Anzahl der betroffenen Datensätze und nun können Sie diese Information Ihren Besuchern zeigen oder diese interpretieren um weitere Schritte vorzunehmen.

Läuft nicht so, wie Sie es sich vorstellen? Dann melden Sie sich bei uns, wir helfen gerne weiter.

MySQL Spalten und Tabellen mit Sonderzeichen und Umlaute

Dienstag, 20. März 2012

Auch wenn Sie ein MySQL Profi sind, werden Sie zu einer bestimmten Zeit MySQL Spalten- und Tabellennamen mit Sonderzeichen anlegen wollen oder müssen. Das gilt auch für den Fall, wenn Ihre MySQL Tabelle oder Spalte ein durch MySQL reserviertes Wort enthält oder wenn Sie Ihre User direkt die Tabellenerstellung über eine Schnittstelle überlassen. Wichtig zu wissen ist, dass dies am besten umzugehen jedoch nicht unmöglich ist – Sie können ohne Probleme Sonderzeichen und Umlaute in Ihren MySQL Tabellennamen und Spaltennamen anwenden, wenn Sie sich einfach an die Spielregeln halten was die korrekte Schreibweise Ihrer MySQL Abfragen angeht.

Problematik mit Sonderzeichen und Umlauten in MySQL Tabellen und Spalten

Angenommen, Sie hätten die MySQL Tabelle Haus-Benutzer. Folgende Abfrage:

SELECT * FROM Haus-Benutzer

würde direkt scheitern, da der Bindestrich innerhalb der Abfrage anders interpretiert wird. Auch eine solche Abfrage:

SELECT * FROM Gewünschte Farbe

oder

 SELECT * FROM Release 

ist ungültig. Das Leerzeichen bringt die Abfrage durch einander, an dieser Stelle wird als Tabellenname ‘Gewünschte’ betrachtet. ‘Release’ ist ein durch MySQL reserviertes Wort.

Lösung – korrekte MySQL Schreibweise für Sonderzeichen, Bindestriche und Umlaute

Die allgemeine Lösung ist die Nutzung von einem Sonderapostrophen – `. Die Umfassung von Spalten und Tabellen, egal wo diese in der Abfrage vorkommen, ist eine Voraussetzung für problemlose Abfragenergebnisse und sagt dem MySQL Engine, dass an dieser Stelle genau eine Tabelle oder Spalte gemeint ist. Eine korrekte Abfrage kann so aussehen:

SELECT * FROM `Gewünschte Farbe` WHERE `Release`='ja' AND `Präzision`>1 ORDER BY `Präzision`

Bitte, betrachten Sie die Nutzung von ` auch in dem Order Klausel, wo auch Spaltennamen angesprochen werden können, die ggf. genauso auskommentiert werden sollen. Wir empfehlen dringend bei Ihrer PHP Programmierung dieses Zeichen bei der dynamischen Generierung Ihrer MySQL Abfrage zu intergrieren. Dies ist auch use-media Programmierstandard.

Noch Fragen? Wir stehen gerne zur Verfügung.

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.