[MySQL] Inhalt eines Feldes beim Auslesen als Spaltennamen setzen

DeluXe

Funkjoker
Abends zusammen,

ich hab ein kleines Problem beim Auslesen von Daten aus einer Datenbank.

Ich habe zwei Tabellen:

table categories
+-----------------------------------------+
| id | pid | field1 | field2 |
+-----------------------------------------+
| 1 | 0 | oink | 7 |
+-----------------------------------------+
| 2 | 0 | moep | 11 |
+-----------------------------------------+

table fields
+-------------------------------------------------+
| id | name | title | description |
+-------------------------------------------------+
| 1 | Zeugs | foo | Viel Zeug |
+-------------------------------------------------+
| 2 | Gedöhns | bar | falleri |
+-------------------------------------------------+

Die Tabelle "categories" kann per Klicki-Bunti um weitere Felder erweitert werden, welche aus dem Wort "field" plus die ID aus der Tabelle "fields" zusammen gesetzt werden.
So entstehen diese Felder.

Das Problem an der ganzen Geschichte:
Ich möchte, das der Spaltenname, z. B. "field1", mit dem String, welcher in "title" der Tabelle "fields" mit der ID 1, ausgetauscht wird.
Im Endeffekt erhalte ich beim Auslesen dann ein Feld names "foo" und ein Feld namens "bar", nicht "field1" und "field2".

Ist das nur mit MySQL überhaupt machbar?

(Ich möchte an dieser Stelle nicht über Sinn oder Unsinn einer solchen Vorgehensweise diskutieren, ich weiss sehr wohl dass das nicht die feine Art ist. Danke.) ;)
 
Hi,

meinst Du sowas hier:
PHP:
CREATE  PROCEDURE xtest3(varGo char(16))
     		 BEGIN
         DECLARE varColumn1 varchar(41);
         DECLARE varColumn2 varchar(41);
			SELECT title INTO varColumn1 from fields1 where id = 1;
			SELECT title INTO varColumn2 from fields1 where id = 2;
					select varColumn1;
			set @c1 = concat ('alter table categories change field1 ', varColumn1,'  varchar(25) ');
					select varColumn2;
      set @c2 = concat ('alter table categories change field2 ', varColumn2,'  varchar(25) ');					
			prepare stmt1 from @c1;
  		execute stmt1;
  		prepare stmt from @c2;
  		execute stmt;
  		select varGo;
		   END;
//
 
Ich hab mir das eben mal angesehen und muss sagen...das ist selbst mir zu dirty. ;)

Ich habe auf irgendeine von MySQL bereit gestellte Funktion gehofft, die mir bei dem Problem hätte behilflich sein können, nicht jedoch auf ein solches Gebastel (Ich empfinde es leider als ein solches.)

Dann muss ich eben doch eine Query mehr machen, um an die nötigen Informationen zu kommen...davon wird der Server nicht untergehen :)
 
Zurück