2011-01-03 16 views
4

Angenommen, ich habe eine Auswahlabfrage wie:MySQL: mehrere Spaltenwerte als 1 durch Komma getrennte Zeichenfolge?

SELECT * FROM tablename 

und in der Tabelle sind Spalten: Feld1, Feld2 und field3

Weiß jemand, wenn es möglich ist, mit 1-Feld mit nur 1 Zeile ein Resultset zu erhalten mit Komma Werte der Säulen getrennt, wie folgen aus:

"fieldvalue1, fieldvalue2, fieldvalue3" 

Problem ist, dass ich die Spaltennamen der Tabelle weiß nicht im Voraus ...

Ein weiteres Problem ist, dass eine vorbereitete Anweisung nicht der richtige Weg ist, da dies alles innerhalb eines Triggers geschehen sollte und MySQL dynamische Cursor/Selects innerhalb eines Triggers nicht erlaubt.

+0

Ich missverstanden Ihre Frage, oops. Ich dachte, Sie wollten die Spaltennamen durch Komma getrennt haben. – BoltClock

Antwort

6

ich einige der Forschung getan haben und kam nur bis GROUP_CONCATenating die Spaltennamen korrekt. Aber das Problem ist, dass

SELECT (SELECT GROUP_CONCAT(cols.column_name) FROM (SELECT column_name FROM information_schema.columns WHERE table_name='test_table') as cols) FROM test_table 

eine zurückkehren und die gleiche verkettete Zeichenfolge die Spaltennamen enthält, einmal für jede Zeile der Tabelle, anstatt sie wie die Spaltennamen für die äußere select-Anweisung Auswertung und Rücksendung der Ist-Werte .

Von dem, was ich in allen Foren gelesen habe, die diese Art von Frage diskutieren (und es gab viele), gibt es wirklich keine Möglichkeit, das ohne vorbereitete Aussagen zu funktionieren.

Ich denke nur an eine andere Möglichkeit, dies zu tun, und das wäre eine dedizierte Spalte für jede Tabelle, wo Sie die einzelnen Spaltenwerte bei INSERT oder UPDATE verketten, so dass Sie einfach dieses ein Feld anstelle von auswählen können die ganze Reihe von Feldern.

1

zunächst die Spalten Namen im Voraus zu erfahren, unter der Annahme, dass Sie die Tabelle Namen haben, können Sie sie wie jede andere Abfrage erhalten:

SHOW COLUMNS FROM your_table

Einmal Sie haben die Namen, die Sie tun können:

SELECT CONCAT (field1, '', field2, '', field3) AS Newfield VON your_table

+0

Dies wird nicht funktionieren, da ich keine vorbereitete Anweisung verwenden kann, um die Auswahl zu erstellen (weil Sie keine vorbereiteten Anweisungen innerhalb eines Triggers verwenden können). Ich denke es kann einfach nicht gemacht werden ... – Dylan

0

Scheint, wie Sie 3 Fragen hier:

  1. ein Resultset mit 1 Reihe bekommen, Feld 1: MYSQL hat eine CONCAT_WS Funktion, die wie folgt funktioniert: SELECT CONCAT_WS(',',Field1,Field2,Field3) , die zurückkehren wird „Field1Value, Field2Value , Field3Value "

  2. Ich bin nicht sicher, wie Sie diese Spaltennamen erhalten werden. Müssen Sie sie von einer SQL-Anweisung, einer Zeichenfolge usw. abrufen? Sie können die Tabellennamen `SHOW COLUMNS FROM Tabellenname 'abrufen. Die Feld Spalte wird die Spaltennamen haben.

  3. Trigger sind verfügbar in mysql (hinzugefügt in 5.0.2 glaube ich): http://dev.mysql.com/doc/refman/5.0/en/triggers.html

+0

Nein, es war 1 Frage. Ich weiß, wie gespeicherte Prozeduren, Cursor, Trigger, vorbereitete Anweisungen und wie die Feldnamen aus einer Tabelle abgerufen werden. Aber es ist nicht möglich, all dies in einem Trigger zu tun. MySQL lässt das einfach nicht zu. – Dylan

+0

Wenn Sie einen Dienst ausführen können, können Sie den Trigger verwenden, um Daten in eine Tabelle einzufügen, die regelmäßig gescannt wird. Je nach Ihren Anforderungen können Sie Ihren Trigger so einfach wie "INSERT INTO TriggeredCodeTable (csvfields, Tabellenname)" haben. Der Dienst scannt diese Tabelle so oft wie nötig und erstellt dynamische SQL, um das zu tun, was Sie brauchen. Nicht so schön wie ein einfacher Auslöser, aber machbar – ChrisG

Verwandte Themen