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.
- Der Punkt steht also für ein beliebiges Zeichen.
- 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:
- In CONCAT () ist es ein normaler String, kein Regex.
- CONCAT
Jörg Reinholz