Informix сгенерировать запрос из другого запроса (eval результатов в SELECT) — PHP и Informix

Во-первых, простой вопрос: есть ли что-то как функция «EVAL ()» в Informix?

И теперь, если кому-то интересно, есть проблема реального мира, где мне нужна функция EVAL ():

Итак, у меня есть две таблицы в БД:

  • Кулачный стол (основной) sales_data(data_id, data_val_id, другие, столбцы, …)

  • Второй стол for_select(data_id, select_part, from_part, where_part, key_column_name)

Проблема в том, что в первой таблице у меня нет всех данных, которые мне нужны. Дополнительные данные находятся в других таблицах в зависимости от столбцов «data_id» и «data_val_id» в первой таблице.

Итак, вторая таблица предназначена для создания SQL SELECT для получения этих дополнительных данных из других таблиц.

Теперь мне нужно создать SQL-запрос следующим образом (но я думаю, что в Informix нет функции EVAL):

SELECT
data_id,
data_val_id,
(SELECT
EVAL(SELECT select_part FROM for_select WHERE data_id=sales_data.data_id)
FROM
EVAL(SELECT from_part FROM for_select WHERE data_id=sales_data.data_id)
WHERE
EVAL(SELECT where_part FROM for_select WHERE data_id=sales_data.data_id)
AND
EVAL(SELECT key_column_name FROM for_select WHERE data_id=sales_data.data_id) = sales_data.data_val_id
) AS additional_data
FROM
sales_data

Я не знаю, кто придумал эту идею, но она не моя, и я не могу ее оспорить …

Я пытался сделать это в PHP с динамическими запросами SQL, но это очень медленно. Для каждой строки в результатах из основной таблицы PHP должен подключиться к серверу и отправить новый запрос. Это очень медленно, и в основной таблице у меня есть около 50000 строк, и у меня есть еще 4 столбца «extra_data» (всего 5 столбцов «data_id» и «data_val_id» в основной таблице).

Кто-нибудь может мне помочь? Это возможно в одном SELECT? Есть ли что-то как функция «EVAL ()» в Informix?

——— больше объяснений ———

Каждый ряд в for_select Стол очень отличается друг от друга. Данные в sales_data Таблица из наших продаж (наша работа) и окончательный отчет (объединенные основные и дополнительные данные) должны иметь все столбцы. Это то, что мы не можем изменить, отчет должен выглядеть так, как он выглядит сейчас, и должен содержать все данные, которые есть сейчас. Мне просто нужно найти способ экспортировать его быстрее, чем сейчас.

Я постараюсь написать пример: в БД у нас есть таблицы для складов, для товаров, для клиентов, для работников, для автомобилей, … и каждый ряд в for_select таблица для одной из этих таблиц. Таблица for_select имеет 54 строки, так что это означает, что у нас есть 54 таблицы, из которых нам нужны дополнительные данные для помещения в окончательный отчет.

В sales_data у нас есть только 5 столбцов, которые можно использовать для 5 разных вещей в зависимости от data_id столбец, но у меня есть 54 возможных «вещей», которые могут быть там, поэтому сочетание data_id (какая таблица используется для «дополнительных данных») и data_val_id (какую строку из этой таблицы) определить, что будет в итоговом отчете. В реальной жизни data_id для разных типов товаров, которые мы продаем, и поэтому для каждого различного товара нам нужно показать разные «дополнительные данные» в дополнение к базовым данным: количество проданных товаров, цена, …

Итак, зачем нам for_select стол, спросите вы? Потому что каждая таблица для дополнительных данных имеет разные имена для столбцов и в разных местах. Таблица cars иметь car_id, car_model столбцы кроме таблицы warehouses иметь wh_id,wh_location а также wh_name столбцы, от cars стол мне нужен только car_model столбец, но из warehouses я нуждаюсь wh_location||wh_name вместе (конкатенация).

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

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]