首页 > 解决方案 > 如何从查询中检索嵌套连接选择语句数据

问题描述

我有以下查询,但不确定如何从嵌套连接查询中检索“注释”。此左连接选择此客户的最新注释,但我不确定如何回显此数据...

LEFT JOIN (SELECT note AS latestnote, timestamp, renewalid FROM renewal_note ORDER BY timestamp DESC LIMIT 1) AS n ON n.renewalid=renewal.id 

完整查询:

SELECT renewal.id AS rid, renewal.personid, renewal.enddate, renewal.assettype, renewal.producttype, renewal.vrm, renewal.make, renewal.model, renewal.submodel, renewal.derivative, renewal.complete, person.forename, person.surname, person.company, appointment.id AS appid, appointment.renewalid, 
        (SELECT COUNT(complete) FROM renewal WHERE complete=1 && enddate BETWEEN '".$month_start."' AND '".$month_end."' && dealershipid='".$dealership_id."' && assettype='U' && producttype!='CH' && complete=1) AS renewedcount 
        FROM renewal 
        LEFT JOIN person ON person.id=renewal.personid 
        LEFT JOIN appointment ON appointment.renewalid=renewal.id 
        LEFT JOIN (SELECT note AS latestnote, timestamp, renewalid FROM renewal_note ORDER BY timestamp DESC LIMIT 1) AS n ON n.renewalid=renewal.id 
        WHERE enddate BETWEEN '".$month_start."' AND '".$month_end."' && renewal.dealershipid='".$dealership_id."' && assettype='U' && producttype NOT LIKE '%CH%' 
        ORDER BY enddate ASC

以下是当前每个循环中返回的内容(工作正常),我可以正常访问;$row['COLUMNNAME']。

rid
personid
enddate
assettype
used/new
producttype
vrm
make
model
submodel
derivative
complete
forename
surname
company
appid
renewalid
renewedcount

但是我还需要能够从renewable_note(第三个左连接)中获取注释。我没有正常的内部连接问题,但我从未创建过带有子查询的查询,因此很难在 php 循环中回显这些数据。

(只是要指出,我嵌套查询的唯一原因是我只需要返回每个客户的最新注释。)

我试过 $row['latestnote'], (没有成功),我确信这绝对不是访问这些数据的方法。

有人可以指出我正确的方向吗?

更新 随着评论的更新,我尝试了一个更简化的查询(包含所有列,所以不能错过任何内容)专门针对子查询:

SELECT
    *
FROM
    renewal
LEFT JOIN(
    SELECT
        *
    FROM
        renewal_note
    ORDER BY
        TIMESTAMP
    DESC
LIMIT 1
) AS n
ON
    n.renewalid = renewal.id

但这仍然为renewal_note 上的每一列返回NULL。

90% 的“续订”记录在续订注释表中都有与之链接的注释,但没有显示。

更新表有唯一的主键;ID。renewal_note 表通过列名链接:renewalid。

标签: phpsql

解决方案


我想我已经猜到了。

感谢评论者:)

纯粹为其他有类似问题/问题的人发布此信息。

要从 LEFT JOIN(SELECT... 语句中获取数据;将别名包含到外部 SELECT 语句中。然后您可以正常使用 $row['columnname']。

子查询上的 LIMIT 1 只返回了整个查询的 1 条记录。删除 LIMIT 1 以显示依赖于主查询“链接”的子查询的所有结果。

根据我的测试, ORDER BY 似乎正在工作,但不确定这是否是侥幸,或者它是否只是按主键自然排序;ID


推荐阅读