2009-04-04 4 views
1

Hiii,Pivoting Концепция

У меня есть проект базы данных, как:

Table File (FileID, Name, Details) 

Table Attributes (AttID, AttName, AttType) 

Table AttValues (FileID, AttID, AttValue) 

До выполнения, не известно, сколько Attributes находятся в File и какие имена.

И я хочу, чтобы отобразить после введения в Frontend таким образом, как, как:

FileID, FileName, Details, (Rows of Attribute Table as Column here). 

т.е. Может кто-нибудь предоставить мне кусок кода в Java или MySQL для достижения этого поворачивающегося результата.

Очень благодарен за ваше драгоценное время.

Или есть ли другой лучший способ хранения данных, чтобы я мог легко получить желаемый результат.

+0

показать нам свою попытку ... –

ответ

1

Для этого требуются два запроса. Сначала выберите File:

SELECT * FROM File WHERE (...) 

Затем принести Attributes:

SELECT * 
FROM AttValues 
    JOIN Attributes ON (Attributes.AttId = AttValues.AttId) 
WHERE FileId = $id 

Последний запрос предоставит вам один ряд на Attribute, которые вы можете программно поворота для отображения на вашем веб-интерфейсе:

foreach(row in result) { 
    table.AddColumn(Header = row['AttName'], Value = row['AttValue']); 
} 

При необходимости адаптируйте к локальной среде программирования.


Конечно, это работает только для одного File или File с с теми же атрибутами. Если вы хотите отобразить несколько файлов с различными Attributes вы можете вместо этого упреждающего всех AttName S:

SELECT Attributes.AttId, Attributes.AttName 
FROM Attributes 
    JOIN AttValues ON (Attributes.AttId = AttValues.AttId) 
WHERE FileId IN ($list_of_ids) 

Затем загрузите значения, как это:

SELECT * 
    FROM AttValues 
WHERE FileId IN ($list_of_ids) 

и использовать локальный ассоциативный массив для сопоставления с AttId с для индексов столбцов.

В качестве окончательной оптимизации вы можете объединить последние два запроса в OUTER JOIN, чтобы избежать третьей поездки туда и обратно. Хотя это, вероятно, увеличит количество переданных данных, оно также облегчит заполнение таблицы, если ваша библиотека классов поддерживает именованные столбцы.

+0

Ваш запрос дает по строке в атрибуте: Но как Опускайте его Programmaticaly .. я stucked здесь .. Ни я не мог бы написать Progam, чтобы выполнить его, ни я пишу Proicedure к Acheive It .. Помогите мне .. Есть ли какой-нибудь код для получения этого. Спасибо 4 урока драгоценного времени. –

+0

Добро пожаловать. Я немного расширил ответ.Надеюсь, вы сможете достичь своих целей. –