首页 > 解决方案 > Informix 从其他查询生成查询(评估结果到 SELECT) - PHP 和 Informix

问题描述

首先,只是一个简单的问题:Informix 中是否有“EVAL()”函数?

现在,如果有人有兴趣,我需要 EVAL() 函数的现实世界问题:

所以,我在数据库中有两个表:

问题是在第一个表中我没有我需要的所有数据。其他表中的附加数据取决于第一个表中的“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桌子,你问?因为每个附加数据的表都有不同的列名称和不同的位置。表carscar_idcar_model列,但表warehouseswh_idwh_locationwh_name列,cars表中我只需要car_model列,但warehouses我需要wh_location||wh_name一起(连接)。

表格名称和数据是塞尔维亚语,名称根本不提供信息,所以我尽力将其翻译成英文,以便大家都能理解。原始数据只会让大家感到困惑......

标签: phpsqlselectevalinformix

解决方案


推荐阅读