Pertanyaannya menyebutkan MySQL, dan sebenarnya DBMS ini memiliki fungsi khusus untuk masalah seperti ini:GROUP_CONCAT(expr)
. Lihat di referensi MySQL manual tentang fungsi grup-demi-fungsi
. Fungsi tersebut telah ditambahkan di MySQL versi 4.1. Anda akan menggunakan GROUP BY FileID
dalam kueri.
Saya tidak begitu yakin tentang bagaimana Anda ingin hasilnya terlihat. Jika Anda ingin setiap atribut terdaftar untuk setiap item (bahkan jika tidak disetel), itu akan lebih sulit. Namun, ini adalah saran saya untuk melakukannya:
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;
Ini memberi Anda semua atribut dalam urutan yang sama, yang mungkin berguna. Outputnya akan seperti berikut:
'F001', 'Dox', 'vinay', 'CustomAttr1:varchar(40):Akash, CustomUseDate:Datetime:2009/03/02'
Dengan cara ini Anda hanya memerlukan satu kueri DB tunggal, dan hasilnya mudah diurai. Jika Anda ingin menyimpan atribut sebagai Datetime dll. di DB, Anda harus menggunakan SQL dinamis, tetapi saya akan menghindarinya dan menyimpan nilainya dalam varchars.