Въпросът споменава MySQL и всъщност тази СУБД има специална функция за този вид проблеми:GROUP_CONCAT(expr)
. Разгледайте в Справочник за MySQL ръководство за група по функции
. Функцията е добавена в MySQL версия 4.1. Ще използвате GROUP BY FileID
в заявката.
Не съм много сигурен как искате да изглежда резултатът. Ако искате всеки атрибут да бъде изброен за всеки елемент (дори и да не е зададен), ще бъде по-трудно. Това обаче е моето предложение как да го направя:
SELECT bt.FileID, Title, Author,
GROUP_CONCAT(
CONCAT_WS(':', at.AttributeName, at.AttributeType, avt.AttributeValue)
ORDER BY at.AttributeName SEPARATOR ', ')
FROM BaseTable bt JOIN AttributeValueTable avt ON avt.FileID=bt.FileID
JOIN AttributeTable at ON avt.AttributeId=at.AttributeId
GROUP BY bt.FileID;
Това ви дава всички атрибути в същия ред, което може да бъде полезно. Резултатът ще бъде както следва:
'F001', 'Dox', 'vinay', 'CustomAttr1:varchar(40):Akash, CustomUseDate:Datetime:2009/03/02'
По този начин имате нужда само от една заявка от DB и изходът е лесен за анализиране. Ако искате да съхраните атрибутите като реално време за дата и т.н. в DB, ще трябва да използвате динамичен SQL, но бих останал настрана от това и бих съхранявал стойностите във varchars.