1

我有这个用 php 编写的查询:

<?php
$dsn="sistema";
$usuario="";
$clave="";
/*conexion mediante odbc*/
$cid=odbc_connect($dsn, $usuario, $clave);
if (!$cid){
exit("<strong>Ya ocurrido un error tratando de conectarse con el origen de datos.  </strong>");
}
$sql="SELECT SUM(Document.docimp) AS sumar FROM Document WHERE Doctpo IN ('1','6','7') AND Document.Abocod = 1";
$sql1="SELECT SUM(Document.docimp) AS restar FROM Document WHERE Doctpo IN ('2','3') AND Document.Abocod = 1";
$sql3="Select (A.sumar - A.restar) AS Saldo; 
From (;
Select Document.abocod,;
      (SELECT SUM(Document.docimp) AS sumar;
    FROM Document; 
    WHERE Doctpo IN ('1','6','7'); 
        AND Document.Abocod = 1;
    ),;
    (SELECT SUM(Document.docimp) AS restar ;
    FROM Document; 
    WHERE Doctpo IN ('2','3'); 
        AND Document.Abocod = 1;
    );
From; Document;
Where Document.abocod = 1;
GROUP BY Document.abocod;
)AS A";
$result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec"));
print odbc_result_all($result,"Border=1"););
?>

从 Document 表中sql获取,Doctpo 字段中所有类型为 1,6 和 7 的文件,执行字段sum中的内容Docimp,按等于 1 的订阅者编号(abocod)过滤并将结果与​​其名称(别名)一起放置。

功能与sql1相同sql,但这里是客户进行的付款,使用与上述相同的字段,但仅选择类型 2 和 3。

sql3是将sqland连接到sql1单个查询中的查询,并执行由sqland单独执行的所有功能sql1

当我将查询 (SQL) 运行到 visual fox pro 中时,它们可以完美运行,但是当我从 php 执行它们sqlsql1执行工作时,它总是会在sql3语句中引发错误。说该表无法识别或不存在。

如果这在 Visual foxpro 本身上完美运行,我无法弄清楚它如何无法与这些表进行连接。

我想知道 php、odbc 和 visual fox pro 是否有“更清洁”或“更好”的方法。

任何人都可以对此有所了解吗?

提前致谢!

4

1 回答 1

1

如何只运行一次查询而不是两个单独的查询,然后加入......类似的东西

select
      sum( 0000.00 + iif( Doctpo in ( '1', '6', '7' ), Document.docimp, 0 )) as Sumar,
      sum( 0000.00 + iif( Doctpo in ( '2', '3' ), Document.docimp, 0 )) as Restar,
      sum( Document.docimp * iif( Doctpo in ( '1', '6', '7' ), 1, -1 )) as Saldo
   from
      FROM Document; 
   WHERE 
          Document.Abocod = 1;
      AND Doctpo IN ('1','6','7', '2', '3'); 

我正在做 0000.00 + IIF() 的总和,因为无论从 VFP 查询返回的第一个值是最终集中该列类型的基础。因此,如果您期望任何余额高于 9999.99,您可能需要根据需要调整默认长度/精度。

于 2013-10-21T11:41:05.033 回答