Отображение таблицы 3x100 СУБД
как таблицы 10x10
3 таблицы базы данных в 1 таблицу браузера
Рассмотрим типичную таблицу
(такие "широкие" таблицы в дальнейшем будем называть многомерными).
|
home |
horse |
car |
yacht |
Smith |
250 |
70 |
50 |
180 |
Tomson |
340 |
|
90 |
100 |
Johnson |
100 |
|
10 |
210 |
|
В базе данных многомерная таблица представлена в виде трех таблиц
(которые в дальнейшем будем называть реляционными).
Одна (в данном случае таблица "cost") содержит записи из трех полей:
идентификатор строки, идентификатор колонки (первичный ключ из двух полей) и
значение для ячейки.
Две других (в данном случае "things" и "family") - также из трех полей:
идентификатор строки или колонки (первичный ключ),
порядковый номер для визуализации на экране и название строки (или колонки).
cost
person |
goods |
many |
11 |
101 |
250 |
11 |
52 |
70 |
11 |
23 |
50 |
11 |
84 |
180 |
72 |
101 |
340 |
72 |
23 |
90 |
72 |
84 |
100 |
43 |
101 |
100 |
43 |
23 |
10 |
43 |
84 |
210 |
|
things
pk |
ser |
what |
101 |
1 |
home |
52 |
2 |
horse |
23 |
3 |
car |
84 |
4 |
yacht |
|
family
pk |
ser |
who |
11 |
1 |
Smith |
72 |
2 |
Tomson |
43 |
3 |
Johnson |
|
Вложим тег tside внутрь table
,
чтобы уведомить браузер, что это таблица особого вида.
Внутри
thead
,
tside,
tbody
расположим теги, название которых значения не имеет.
Тег, вложенный в tbody
, т.е. 'cost' не будет отображен,
если он предназначен для строки или столбца, который не существует.
<table>
<thead>
<things pk="101" what="home">
<things pk="52" what="horse">
<things pk="23" what="car">
<things pk="84" what="yacht">
</thead>
<tside>
<family pk="11" who="Smith">
<family pk="72" who="Tomson">
<family pk="43" who="Johnson">
</tside>
<tbody>
<cost person="11" goods="101" many="250">
<cost person="11" goods="52" many="70">
<cost person="11" goods="23" many="50">
<cost person="11" goods="84" many="180">
<cost person="72" goods="101" many="340">
<cost person="72" goods="23" many="90">
<cost person="72" goods="84" many="100">
<cost person="43" goods="101" many="100">
<cost person="43" goods="23" many="10">
<cost person="43" goods="84" many="210">
</tbody>
</table>
thead {
pk: §pk;
attract: §goods;
content: §what;
}
tside {
pk: §pk;
attract: §person;
content: §who;
}
tbody {
content: §many;
}
Такие конструкции легко получить SQL-запросами наподобие следующего
(более для этого приспособлен язык
SQL5)
select '<table><thead>'
union
select '<things pk=' + pk + ' what=' + what + '>' from things order by ser
union
select '</thead><tside>'
union
select '<family pk=' + pk + ' who=' + who + '>' from family order by ser
union
select '</tside><tbody>'
union
select '<cost person=' + person + ' goods=' + goods + ' many=' + many + '>' from cost
union
select '</tbody></table>';
Отправка формы
Если
то браузер посылает следующий XML-текст
<cost person="11" goods="52" many="80">
<cost person="43" goods="101" many="110">
Тюрин Дмитрий