Otázka zmiňuje MySQL a ve skutečnosti má tento DBMS speciální funkci pro tento druh problému:GROUP_CONCAT(expr)
. Podívejte se do reference MySQL manuál o funkcích po skupinách
. Funkce byla přidána do MySQL verze 4.1. Budete používat GROUP BY FileID
v dotazu.
Nejsem si jistý, jak chcete, aby výsledek vypadal. Pokud chcete, aby byly u každé položky uvedeny všechny atributy (i když nebyly nastaveny), bude to těžší. Nicméně toto je můj návrh, jak to udělat:
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;
Tím získáte všechny atributy ve stejném pořadí, což by mohlo být užitečné. Výstup bude následující:
'F001', 'Dox', 'vinay', 'CustomAttr1:varchar(40):Akash, CustomUseDate:Datetime:2009/03/02'
Tímto způsobem potřebujete pouze jeden DB dotaz a výstup lze snadno analyzovat. Pokud chcete uložit atributy jako skutečný Datetime atd. v DB, budete muset použít dynamické SQL, ale já bych se tomu vyhýbal a ukládal hodnoty do varchars.