繁体   English   中英

PHP odbc_exec 不返回所有行

[英]PHP odbc_exec not returning all rows

这个简单的查询

SELECT 
    DBA.Goods.ID,  /* PK in the Goods table */
    DBA.Goods.Name,
    DBA.GoodsGroup.Name as GdGrp,
    DBA.InvoiceItem.Qty,
    DBA.InvoiceItem.ID,   /* PK in the InvoiceItem table */
    DBA.InvoiceItem.PrintName,
    DBA.InvoiceItem.Price,
    DBA.InvoiceItem.InvoiceID, /* PK in the Invoice table, a parent table of a sort */
    DBA.InvoiceItem.InvoiceItemOrder,
    DBA.InvoiceItem.ProcPrice,
FROM (
    DBA.Goods INNER JOIN DBA.InvoiceItem
        ON DBA.Goods.GoodsSk = DBA.InvoiceItem.GoodsSK
)
INNER JOIN DBA.GoodsGroup
    ON DBA.Goods.GroupID = DBA.GoodsGroup.ID
WHERE DBA.InvoiceItem.InvoiceID = $invoiceID /* ID of a specific invoice, used here to get to its contents, i.e. specific items within that invoice */

在 DBExplorer(用于执行原始 SQL 查询的数据库工具)中运行时,返回 5 行(发票内容)。 一切都以这样一种方式设置,即发票可能包含多个具有相同 ID 的货物(但具有不同的价格和采购价格、印刷名称 - 例如桶白、桶蓝、桶红等)。 每个项目在Items表中都有一个唯一的 ID。 上述5行是预期结果(即列表中的商品为实际售出的商品)。

但是,当查询通过以下方式发送到数据库时:

$result = odbc_exec($conn,$query);

odbc_num_rows($results)不是 5,正如预期和在 DBExplorer 中看到的那样,而是 3 - 不返回(感知的)重复项(在上一个示例中的所有存储桶中,只返回一个)。

此外,在循环遍历结果时

while($rowItems = odbc_fetch_object($result) {
    ...
}

只有 3 次迭代,而不是预期的 5 次。

考虑到列顺序可能会导致问题(我知道这很愚蠢),我将DBA.InvoiceItem.ID移到顶部,使其成为结果集中的第一列。 然而,这没有任何作用。

为什么会发生这种情况,我怎样才能让它返回完整的结果集?

笔记

我知道在 SO 上也有类似的问题:

php odbc_exec 不返回所有结果

为什么此代码不返回所有行?

在php中使用odbc_exec无法从查询中获取所有行

但它们都没有真正解决这里提出的问题 - 如何获取数据库工具中看到的所有行,而不是减少结果集。

问题出在查询上。 一旦我通过改变加入顺序来改变它,一切都按预期进行。 关键是让DBA.InvoiceItem成为主表,并将所有内容与它连接起来。 我仍然不知道(清楚)为什么这有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM