Spørgsmålet nævner MySQL, og faktisk har dette DBMS en speciel funktion til denne type problemer:GROUP_CONCAT(expr)
. Tag et kig i MySQL-referencen manual om grupper efter funktioner
. Funktionen blev tilføjet i MySQL version 4.1. Du skal bruge GROUP BY FileID
i forespørgslen.
Jeg er ikke helt sikker på, hvordan du vil have resultatet til at se ud. Hvis du vil have hver egenskab opført for hver vare (selvom den ikke er indstillet), vil det være sværere. Dette er dog mit forslag til hvordan man gør det:
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;
Dette giver dig alle attributter i samme rækkefølge, hvilket kunne være nyttigt. Outputtet vil være som følgende:
'F001', 'Dox', 'vinay', 'CustomAttr1:varchar(40):Akash, CustomUseDate:Datetime:2009/03/02'
På denne måde behøver du kun én enkelt DB-forespørgsel, og outputtet er nemt at parse. Hvis du vil gemme attributterne som ægte Datetime osv. i DB'en, skal du bruge dynamisk SQL, men jeg vil holde mig fra det og gemme værdierne i varchars.