Frage von Plueschtier94, 27

MySQL - Verketten von Strings im SELECT WENN NICHT LEER?

Hallo zusammen,

hat da zu vielleicht jemand eine Idee, bzw kann mir helfen wie dies auszusehen hat.

Ich würde gerne mehrere Spalten (bild1, bild2, bild3, bild4, bild5) miteinander verketten. Die spalten enthalten eine url als string. Damit alles ein wenig einfacher zu verarbeiten ist mittels php später, hätte ich gerne eine abfrage, die mir alle urls, kommasepariert in einem wert ausgibt.

Das klappt folgender Maßen schon:

SELECT CONCAT(wp.bild1,',',wp.bild2,',',wp.bild3,',',wp.bild4,',',wp.bild5) as kette FROM wordpress_table wp;

Jetzt hätte ich nur gerne, dass er mir die Strings zusammenfügt, und darauf achtet, dass wenn die Werte leer sind, er mir kein KOMMA da reinhaut.

Hat da jemand Ideen

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von MagicalMonday, 11

Du könntest doppelte Kommas hinterher mit replace() ersetzen. Aber ich würde es an deiner Stelle doch lieber anders machen. Wenn du die Spalten einzeln lässt, kannst du sie mit php doch relativ leicht zusammenfügen.

$result = mysql_query("SELECT `wp.bild1`,`wp.bild2`,...

while($arr = mysql_fetch_array()){

$string = "";
if ($arr["bild1"]) $string .= $arr["bild1"].",";
if ($arr["bild2"]) §string .= $arr["bild2"].",";
[...]

echo $string;
}

So kannst du mit den Werten auch direkt andere Dinge anfangen.

Ich würde es jedenfalls so oder ähnlich machen.



Kommentar von Plueschtier94 ,

Danke für deine Antwort.
Ich durchlaufe allerdings knapp 60.000 Artikel auf diese Weise, und möchte es natürlich so performant machen wie es nur geht.

In den Tests mit der MySQL Workbench macht es kaum einen zeitlichen Unterschied, wenn ich mir die Strings da anfügen lasse. 
Über PHP, wird es allerdings was unperformanter. 

Deswegen suche ich eigentlich diesen Umweg. 

Kommentar von MagicalMonday ,

Dann schaue dir mal CONCAT_WS() an. Das sollte dann am performantesten sein.

Kommentar von Plueschtier94 ,

Vielen Dank! Das ist gut, das kannte ich noch nicht. 

Antwort
von uselexx, 11

was du machen willst erreichst du mit IF

SELECT IF(1<2,'yes','no');

würd ich allerdings nicht so machen.

ich würde mir genau DAS ausgeben lassen, was auch die DB hergibt.. was du mit der query errichen willst würd ich mit der php-verarbeitung machen.. vorteil ist dabei, dass du - wenn du mal debuggen willst - es einfach hast den die fehlerquelle abzugrenzen

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten