Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Таблица с связями внутри к другим таблицам.
Вроде бы просто выбрать отсюда данные, но! Колонка tbl_000009 является именем другой таблицы хранящей данные для этой колонки, а само поле содержит id строки с данными из этой таблицы. Основная проблема в том что таких колонок может быть n-ое количество, а может и не быть вовсе. Таблицу связей использовать нельзя.
Как в таком случае можно выгрести данные из другой таблицы и вставить в поле?
PS! Если это можно сделать через функцию или процедуру, то опишите как(с ними не сталкивался и тяжело к пониманию).
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Думаю, проще будет сделать:
0. В скрипте: SHOW CREATE TABLE / DESCRIBE
1. Выбрать по шаблону колонки, указывающие на связи с таблицами
2. Сгенерировать текст запроса (разумеется, на каждое вхождение будет JOIN по FK)
Правильнее будет изменить логику/структуру во избежание таких конструкций.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Viper
Отправлено: 15 Июня, 2012 - 15:35:32
Активный участник
Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007 Откуда: Симферополь
Помог: 98 раз(а)
EuGen пишет:
Правильнее будет изменить логику/структуру во избежание таких конструкций.
это понятно что идея такой структуры плоха(уже ощутили всю прелесть на выборке 100к записей с лимитами и фильтрами на оракле(2,5 секунды запрос через toad)). Пример можно какой-то привести?
Дело в том что это система журналирования и кол-во полей заранее неизвестно. Изначально через конструктор создается таблица с нужными полями, а поля с данными из других таблиц указываются так как я описал выше. Уйти от данных из других таблиц и создавать жесткую структуру не получится т.к. некоторые данные используются в многих местах системы одновременно.
Вроде все необходимые данные привел для понимания. Сам я уже голову сломал придумывая как бы так реализовать как можно проще создание динамических таблиц с связанными данными.
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Не очень понимаю сложность. Могу, конечно, и готовое что-нибудь сделать, но принцип же прост:
0. Делаете mysql_query('DESCRIBE `'.название_таблицы.'`');
1. Предыдущий запрос вернет список колонок. Из этого списка в соответствии слогикой приложения отбираете те, которые являются названиями таблиц. Если нет никакого принципа, по которому такие таблицы именуются, то делаете mysql_query('SHOW TABLES FROM `'.название_БД.'`'); - это вернет список таблиц. По нему проверяете, какие именно присутствуют в списке колонок, которые вернул запрос на шаге 0. Итог шага 1 - готовый список таблиц
2. При помощи готового списка таблиц, полученного на шаге 1 (он будет, к примеру, в виде массива), генерируете текст запроса обычным циклом и конкатенацией, добавляя JOIN с именем таблицы, равной элементу обходимого в цикле массива.
Кажется, все просто, в чем возникает трудность?
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Viper
Отправлено: 15 Июня, 2012 - 16:28:59
Активный участник
Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007 Откуда: Симферополь
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.