Jörg Reinholz: PHPMyAdmin - SQL Befehl

Beitrag lesen

Moin!

SELECT * FROM `produkte` WHERE `p_bild` NOT REGEXP '.jpg' ORDER BY `p_bild` DESC

Vermutlich willst Du alle Datensätze, die nicht auf '.jpg' enden. Und Du verwendest einen regulären Ausdruck.

  1. Der Punkt steht also für ein beliebiges Zeichen.
  2. Du hast nicht gezeigt, wo das String-Ende sein soll.

Das matcht also auch auf einen Eintrag "foojpg1000" - bzw. matcht es nicht (NOT REGEXP) obwohl die Endung fehlt.

Also muss Dein regulärer Ausdruck konkretisiert werden. Das $ zeigt das Ende und dem Punkt wird die Bedeutung von "beliebiges Zeichen" durch einen vorangestellten Backslash genommen:

\.jpg$

Auch wenn es im Testlauf zufällig geht und vielleicht dank einer überschaubaren Anzahl Datensätzen überprüfbar ist: Spätestens wenn das womöglich mal wiederholt werden soll, dann können andere Daten hier zu einem falschen (unvollständigen) Ergebnis führen.

UPDATE `produkte` SET `p_bild` = CONCAT (`p_bild`, '.jpg') WHERE `p_bild` NOT REGEXP '\.jpg$';

Hinweise:

  1. In CONCAT () ist es ein normaler String, kein Regex.
  2. CONCAT

Jörg Reinholz