Функции MySQL, в таблице указанна другая таблица

sublimity

Новичок
Функции MySQL, в таблице указанна другая таблица

Возникла такая проблема, есть таблица (МySQL 5.X)
History:
Id | IDinTable | TableName |
0 | 1 | terminal
1 | 2 | terminal
2 | 1 | quota
3 | 2 | delterminal

В поле TableName – указано имя таблицы в БД ,
IdinTable - ID записи в этой таблице

Необходимо как то сделать один SELECT так чтобы вытащить и данные и из таблицы History и из тех таблиц которые указанны, какой я вижу (примерный) ответ от БД:
Id | IDinTable | TableName | Field_terminal | Field_Quota | …….
0 1 terminal AAAA null
1 2 terminal BBBB null
2 1 quota null AAAAA
3 2 delterminal null null ………

Как ни буть на хранимых процедурах это можно сделать ?
Или это придется делать на стороне PHP, т.е. получить строку послать Select .....?
Заранее всем спасибо.
 

Wicked

Новичок
Про хранимые процедуры не знаю. Муся четко разделяет данные и метаданные, так что так можно сделать только на стороне ПХП.

Или... ты можешь заметно упростить себе жизнь, если откажешься от такой архитектуры. Я бы объединил таблицы terminal, quota, delterminal в одну и добавил бы там поле (строковое или ENUM), которое бы сожержало значения 'terminal', 'quota', 'delterminal'.
 

sublimity

Новичок
Все дело в том что не просто надо упрастить жизнь :<
Еслиб это было так , я бы переделал , просто это надо впиньдюрить в и без того большой SELECT
вот только начало
SELECT t1.QStagesHistoryID,t1.CustID,t3.AccManager,t2.QTypeID,t1.QStagesHistoryReaded,t1.QStagesActive,t1.TableName,t1.QStageExecutor,t3.ARepresentative,t1.TableFieldID,t3.NameRus,t4.QTypeName,t6.DepShortName,t5.QStageName,t1.QStageSetupDate,t7.ColorValue,t3.AOffice,t1.QuotaStatusID from
ama_quotastageshistory as t1,
ama_quotastage as t2,
ama_customer as t3,
ama_quotatype as t4,
ama_quotastagename as t5,
ama_department as t6,
ama_quotastagecolor as t7
..........
=> И это вызываеться каждую минуту а то и больше........
На php это будет крайне медленно.........

А нет чтото типа SELECT * FROM (SELECT) ????
 

Wicked

Новичок
по первому запросу есть одна идея...
[sql]SELECT History.Id, History.IDinTable, History.TableName, terminal.Field_terminal, quota.Field_Quota, ...
from History
left join terminal on (History.TableName = 'terminal' AND terminal.id = History.IDinTable)
left join quota on (History.TableName = 'quota' AND quota.id = History.IDinTable), ...
[/sql]
Насчет скрещивания этого и без того уродского запроса со вторым, который тоже не красивее - удачи :)

PS: не надо ставить так много знаков препинения.
 

Апельсин

Оранжевое создание
> Как ни буть на хранимых процедурах это можно сделать ?

можно. использовать prepared statements в хранимых процедурах: подготавливаешь запрос используя результаты одного SELECT, потом выполняешь.
 
Сверху