php - Informix 从其他查询生成查询(评估结果到 SELECT) - PHP 和 Informix
问题描述
首先,只是一个简单的问题:Informix 中是否有“EVAL()”函数?
现在,如果有人有兴趣,我需要 EVAL() 函数的现实世界问题:
所以,我在数据库中有两个表:
第一表(主表)是sales_data(data_id,data_val_id,other,columns,...)
第二个表是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 个“additional_data”列(主表中总共有 5 个“data_id”和“data_val_id”列)。
有人能帮我吗?这可以在一个 SELECT 中实现吗?Informix 中是否有“EVAL()”函数?
-------- 更多解释 ---------
表格中的每一行都for_select
彼此非常不同。表格中的数据sales_data
来自我们的销售(我们的工作),最终报告(连接主要和附加数据)必须包含所有列。这是我们无法改变的,报告必须看看它现在的样子,并且必须拥有现在拥有的所有数据。我只需要找到一种比现在更快地导出它的方法。
我将尝试编写示例:在 DB 中,我们有用于仓库、货物、客户、工人、汽车等的表格……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
一起(连接)。
表格名称和数据是塞尔维亚语,名称根本不提供信息,所以我尽力将其翻译成英文,以便大家都能理解。原始数据只会让大家感到困惑......
解决方案
推荐阅读
- r - 如何将顶点之间的所有路径的权重相乘然后求和?
- c# - 为什么我不能使用 Process.Start 启动 Robocopy
- php - Woocommerce 购买活动
- bash - 尝试将 bash 变量从 .sh 文件导出到另一个运行它的文件
- r - 使用列表更改列 data.table 中的值
- elasticsearch - 如何在 ECK 上为 kafka 输入配置 Filebeat?
- c# - twoWay 绑定在以 ObservableCollection 作为源的 ToggleButton 中不起作用
- python - 从字典列表创建新字典
- dart - 防止插值字符串中的换行符
- javascript - 如何在不再次调用 api 的情况下提取数据