La pregunta menciona MySQL, y de hecho este DBMS tiene una función especial para este tipo de problema:GROUP_CONCAT(expr)
. Eche un vistazo a la referencia de MySQL manual de grupo por funciones
. La función se agregó en MySQL versión 4.1. Usarás GROUP BY FileID
en la consulta.
No estoy muy seguro de cómo quieres que se vea el resultado. Si desea que se enumeren todos los atributos para cada elemento (incluso si no está configurado), será más difícil. Sin embargo, esta es mi sugerencia de cómo hacerlo:
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;
Esto le brinda todos los atributos en el mismo orden, lo que podría ser útil. La salida será como la siguiente:
'F001', 'Dox', 'vinay', 'CustomAttr1:varchar(40):Akash, CustomUseDate:Datetime:2009/03/02'
De esta forma, solo necesita una única consulta de base de datos y el resultado es fácil de analizar. Si desea almacenar los atributos como Datetime real, etc. en la base de datos, necesitaría usar SQL dinámico, pero me mantendría alejado de eso y almacenaría los valores en varchars.