Вывод из нескольких таблиц

Анатолий

Новичок
Вывод из нескольких таблиц

Проблема следующая.
Имеется, например, библиотека, где представлены книги, медиа-файлы, журналы.
Для всех видов представленной информации заведены таблицы.
Для книг:
id
group_id
title
author
public
и т.д.

Для медиа-файлов:
id
group_id
title
author
year
и.т.

Для журналов:
id
group_id
title
issn
и т.д.

group_id в каждой таблице указывает на раздел библиотеки. Количество полей во всех таблицах разное. Как лучше всего вывести для даного раздела все содержимое отсортированное по названию? C помощью UNION и дополнеия недостающих полей единичками? Или Сначала создать промежуточный массив его отсортировать и вывести пользователю?

В общем, посоветуйте, пожалуйста.

Использование промежуточного массива осложняется тем, что нужно использовать постраничный вывод. Так что, наверное, здесь подойдет решение только средствами MySQL.
Неужели никто не сталкивался с такой проблемой??? Куча просмотров и ни одного ответа...
 

alpine

Новичок
Анатолий
Слушай а почему ты хочешь все это в одну кучу смешать?
 

Анатолий

Новичок
alpine
В одну кучу....
Мне нужно разделять разные типы, так скажем товаров. Т.к. у книг ссылка "подробнее" будет вести например на параметр action=fullbook, у файлов action=fullfile и т.д. Так удобнее.

Либо я не понял сути предложения.
 

Фанат

oncle terrible
Команда форума
я сталкивался.
если всё надо выводить в куче, то и хранить надо тоже в куче.
в одной таблице
 

Анатолий

Новичок
Фанат
В одной таблице??? Это же очень не рационально... Получается, что каждая запись имеет около 35 полей. При этом у большенства записей будет заполена максимум треть полей. Мне кажется это не лучший выход.
Фанат, а где ты с таким сталкивался? Если не секрет.
 

Фанат

oncle terrible
Команда форума
специальные характеристики можно хранить отдельно.
хотя и в одной таблице - тоже никакой беды не будет.

Лично я бы делал всё в одной, чтобы не иметь проблем с выводом.
 

chira

Новичок
Анатолий
нельзя ли выводить сначала список с общими полями title, group_name, media_type ... дальше кликая, получать более подробную информацию.
для получения списка с разбивкой на страницы достаточно UNION
Код:
(SELECT id,title, media_type, 'BOOK' action_code
FROM books
WHERE ... )
UNION ALL
(SELECT id,title, media_type, 'DISK'
FROM disks)
UNION ALL
(SELECT id,title, media_type, 'MAGZ'
DROM magazins)
ORDER BY 2 LIMIT start_row, rows_on_page
 

Анатолий

Новичок
chira
Можно, я так и сделал. Я же спрашивал как лучше, так или может есть еще какой способ?
Но, наверное, это самое лучшее решение.
Спасибо ВСЕМ кто откликнулся!
 

Фанат

oncle terrible
Команда форума
chira
а как происходит при этом использование индексов?
вот к примеру, сортировать он будет по дате. и как это всё происходит?
юзинг темпорари, юзинг филесорт, как я понимаю?
 

chira

Новичок
Фанат
юзинг темпорари, юзинг филесорт, как я понимаю?
скорее всего так и есть, для сортировки.
сначала выбираем нужные значения по group_id, используя соответствующий индес, потом сортируем.
если нам нужно выбрабрать сразу всё из одной таблицы, без указания каких-либо фильтров и есть индекс по title, то для сортировки скорее всего он будет использован.

Анатолий
насторожила фраза
Или Сначала создать промежуточный массив его отсортировать и вывести пользователю?
 

Фанат

oncle terrible
Команда форума
так мой вариант тут никого не интересует.

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

Меня интересует вопрос индексов при использовании юнион, которое ты так старателно пропихиваешь.
 

chira

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

alpine

Новичок
Все же решение Фаната будет пошуcтрей работать, но сильно подозреваю что под эту структуру таблиц уже написан бекенд и возможно часть фронтенда и естественно автор топика ничего переделывать не будет. :D
 

Анатолий

Новичок
Автор оригинала: alpine
Все же решение Фаната будет пошуcтрей работать, но сильно подозреваю что под эту структуру таблиц уже написан бекенд и возможно часть фронтенда и естественно автор топика ничего переделывать не будет. :D
Не в том, дело, что переделывать придется много. Тем более там не так уж и много пришлось бы переделывать. Просто нет на это времени. Да и как-то меня смушает хранить все данные в одной таблице. Получается, что теория реляционных баз данных создавалась просто для общего развития...
 

Фанат

oncle terrible
Команда форума
о, да!
юнион - это просто вершина теории реляционных баз данных
связи между таблицами при этом устанавливаются просто железобетонные

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

Фанат

oncle terrible
Команда форума
или укажи, где я это говорил, или возьми свои обратно и извинись
 
Сверху