我有三個MySQL表,簡化,下列:連接錶行到列與列標題從原始行
ModuleEntries (MDE_ID)
ModuleFields (MDF_ID, MDF_Label)
ModuleEntryFieldValues (MFV_ID, MFV_MDE_ID, MFV_MDF_ID, MFV_Value)
你可以從簡化列列表中看到,ModuleEntryFieldValues
是其中指出,表「對於一個條目,這個字段有這個值」。
現在,我想在一個「平面」記錄集中檢索這些信息。我設法讓事情有效,但並不完全符合我的要求。
有了不同的,所以文章的幫助下,我設法列動態的,可變的量的工作,通過使用遊標。
declare finish int default 0; declare fldid int; declare str varchar(10000) default 'SELECT *,'; declare curs cursor for select MDF_ID from ModuleFields group by MDF_ID; declare continue handler for not found set finish = 1; open curs; my_loop:loop fetch curs into fldid; if finish = 1 then leave my_loop; end if; set str = concat(str, 'max(case when MFV_MDF_ID = ',fldid,' then MFV_Value else null end) as field_',fldid,','); end loop; close curs; set str = substr(str,1,char_length(str)-1); set @str = concat(str, ' from ModuleEntries LEFT join ModuleEntryFieldValues ON MDE_ID = MDF_MDE_ID GROUP BY MDE_ID'); prepare stmt from @str; execute stmt; deallocate prepare stmt;
這段代碼不要做的,就是讓我放的MDF_Label
的列值的行的實際列標題。現在,上面的代碼給了我「field_1,field_2,...」 是否有可能將這三個表連接起來,並且將
MDF_Label
作爲現在列中連接表中的行的列標題? 我想這...
ModuleEntries | ModuleFields | ModuleEntryFieldValues
------------- | ------------------ | -----------------------------------
MDE_ID | MDF_ID - MDF_Label | MFV_MDE_ID - MFV_MDF_ID - MFV_Value
1 | 1 - Height | 1 - 1 - 120cms
| 2 - Width | 1 - 2 - 30cms
| 3 - Weight |
這個
Recordset
---------
MDE_ID - Height - Width - Weight
1 - 120cms - 30cms - null
我希望我的問題是很清晰。如果不是,請評論,如果可以的話,我會在需要時提供更多信息。
看看http://stackoverflow.com/questions/985842/mysql-concat-to-create-column-names的答案。我感覺它可能會幫助你。 –