powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Горизонтальная таблица с неизвестным количеством столбцов
9 сообщений из 9, страница 1 из 1
Горизонтальная таблица с неизвестным количеством столбцов
    #38566284
Avtopic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется такая база (см. рис),

нужно в броузере вывести информацию в табличном виде как это указано на рисунке.

Не думал что будет так сложно. Даже не мог решит в каком разделе форума разместить вопрос.

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

нужны идеи как все решить.
...
Рейтинг: 0 / 0
Горизонтальная таблица с неизвестным количеством столбцов
    #38567016
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Avtopic,

вывод "в цикле" как по столбцам, так и по строкам.Запрос формировать динамически на клиенте как вглыбь (пагинация строк), так и вширь (пагинация столбцов). И там и там, для удобства сделать пагинацию через ajax или js, смотря какой объем вглыбь/вширь... выборку для пагинации вширь можно попытаться хранить в сессии, или "довыбирать" строя поля запроса "на лету" - смотря какой объем "вглыбь"...

как-то так, не вижу "сложностей" для идей.
...
Рейтинг: 0 / 0
Горизонтальная таблица с неизвестным количеством столбцов
    #38567936
Avtopic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приходится сперва создавать массив до вывода таблицы, и сформировав массив потом уже выводить таблицу.

Так и делаю и все работает, но избыточно, и вопрос по этому поставил,
таблицу, после выборки из базы, до вывода приходится хранить в массиве, так как заранее неизвестно количество столбцов и строк,
и в случае пагинации тоже, на последнем пейдже тоже неизвестно сколько столбцов осталось выводить.
и может можно обойти массив, но наверно невозможно.
...
Рейтинг: 0 / 0
Горизонтальная таблица с неизвестным количеством столбцов
    #38568230
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Avtopic,

не буду критиковать структуру... видимо была на то причина. Просто замечу, что тип операции с данными по самой операции связан через документ почему-то. Я бы делать так не стал. Но это ладно :) дела не касается.

Правильно я понимаю, что связь между документами и продукцией является "многие к многим" и осуществляется через таблицу операций? Если правильно всё понял, то там же всё легко. Обычный JOIN с сортировкой по нужным столбцам в таблице операций, а потом просто двойной цикл (по горизонтали и по вертикали). Если нужно отрезать только малую часть таблиц (как сказали нужны paginator'ы по горизонтали и вертикали), то джойним не сами таблицы, а временные с соответствующими выборками
Код: sql
1.
2.
3.
4.
5.
SELECT doc.id, prod.id, NOT ISNULL(operation.id) as bound 
FROM (SELECT * FROM product xx,xx) as prod 
CROSS JOIN (SELECT * FROM document LIMIT xx,xx) as doc
LEFT OUTER JOIN operation as operation ON operation.document_id=doc.id AND operation.product_id=prod.id
ORDER BY prod.id, doc.id



Количество столбцов можно получить обычной выборкой COUNT по таблице document.

Ну вроде всё. Не вижу причин, почему надо держать какие-то таблицы в памяти из-за динамики :)

Получается выборка, где каждому продукту соответствует выбранное количество документов... при чём, если в таблице операций такой связки нету, то bound устанавливается в 0.
Единственное - это cross join ... Но тут без него никак... всё остальное будет затратное, так как каждому продукту не будет сопоставлен каждый документ.
...
Рейтинг: 0 / 0
Горизонтальная таблица с неизвестным количеством столбцов
    #38568232
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hotfix. Когда правил сообщение, опечатался :) И вместо xx соответственно подставляем нужные циферки.
Код: sql
1.
2.
3.
4.
5.
SELECT doc.id, prod.id, NOT ISNULL(operation.id) as bound 
FROM (SELECT * FROM product LIMIT xx,xx) as prod 
CROSS JOIN (SELECT * FROM document LIMIT xx,xx) as doc
LEFT OUTER JOIN operation as operation ON operation.document_id=doc.id AND operation.product_id=prod.id
ORDER BY prod.id, doc.id



Если нужны не все документы, а только те, которые участвовали в операциях, то в запрос для получения временной таблицы по таблице document, вставляем inner join операций и продуктов с on по соответствующим полям. Таким образом во временную таблицу попадут только те документы, которым соответствует хотя бы один из выбираемых продуктов.

Вот... теперь точно всё :)
...
Рейтинг: 0 / 0
Горизонтальная таблица с неизвестным количеством столбцов
    #38568238
Avtopic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо за ответ

Програмёрне буду критиковать структуру... видимо была на то причина. Просто замечу, что тип операции с данными по самой операции связан через документ почему-то. Я бы делать так не стал. Но это ладно :) дела не касается..
а вот как раз хотелось бы узнать, комментарии, если можно.

тип операции здесь определяет направление движения товара, от поставщика к организации, или от организации к поставщику
...
Рейтинг: 0 / 0
Горизонтальная таблица с неизвестным количеством столбцов
    #38568241
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Avtopicспасибо за ответ

Програмёрне буду критиковать структуру... видимо была на то причина. Просто замечу, что тип операции с данными по самой операции связан через документ почему-то. Я бы делать так не стал. Но это ладно :) дела не касается..
а вот как раз хотелось бы узнать, комментарии, если можно.

тип операции здесь определяет направление движения товара, от поставщика к организации, или от организации к поставщику

А... ну тут неочевидность названий :) Я бы таблицу эту назвал не "тип операции", а "тип документа"... Хотя даже так было бы не очень круто, ведь можно спутать с назначением документа (аля "накладная", "отчёт" и т.д.), потому лучшее название для таблицы это "направление документа" (по-моему так лучше всего). И тут сразу пропадают все вопросы, так как таблица явно связана с документами, а именно показывает откуда куда документ будет направлен. Ну и в таблице с документами я бы поле тоже назвал бы соответствующе "направление".
...
Рейтинг: 0 / 0
Горизонтальная таблица с неизвестным количеством столбцов
    #38568692
Avtopic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо ! : )
...
Рейтинг: 0 / 0
Горизонтальная таблица с неизвестным количеством столбцов
    #38569420
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёрне буду критиковать структуру... видимо была на то причина.

У препода была причина - проверить ходил студент на лекции, или тусил в секции вольной гульбы.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Горизонтальная таблица с неизвестным количеством столбцов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]