Php 根据另一个SQL查询的结果执行查询

Php 根据另一个SQL查询的结果执行查询,php,mysql,sql,web,Php,Mysql,Sql,Web,我有两张表,上面有客户和分期付款的名称 Customer Table: id | name |contact |address 1 | xyz |33333333|abc 2 | xrz |33322333|abcd Installments Table: id | customer_id |amount_paid |amount_left | date 1 | 1 |2000 |3000 | 13/05/2017 2 | 1

我有两张表,上面有客户和分期付款的名称

Customer Table:
id | name |contact |address
1  | xyz  |33333333|abc
2  | xrz  |33322333|abcd

Installments Table:
id | customer_id |amount_paid |amount_left | date
1  | 1           |2000        |3000        | 13/05/2017
2  | 1           |2000        |1000        | 13/06/2017
现在,我想从分期付款表中为每个用户获取最新的分期付款行,我可以将其用于以下查询

SELECT * FROM installments WHERE customer_id=1 ORDER BY `id` DESC LIMIT 1
现在,问题是我想对所有的客户ID都这样做。我尝试了子查询,但它不支持多行。我试图用PHP将所有客户ID存储在一个数组中,并使用“in”,但由于客户数量超过3000,因此花费的时间太长,并返回一个超出执行时间的错误。
任何形式的帮助或提示都将不胜感激。谢谢

你可以这样做

SELECT
    Customers.CustomerId,
    Customers.Name,
    Customers.Contact,
    Customers.Address,

    Installments.InstallmentId,
    Installments.AmountPaid,
    Installments.AmountLeft,
    Installments.Date
FROM
    Customers
    INNER JOIN
    (
        SELECT
            MAX( InstallmentId ) AS MaxInstallmentId,
            CustomerId
        FROM
            Installments
        GROUP BY
            CustomerId
    ) AS LatestInstallments ON Customers.CustomerId = LatestInstallments.CustomerId
    INNER JOIN Installments ON LatestInstallments.MaxInstallmentId = Installments.InstallmentId
SELECT c.*,I.* FROM Customer_Table c LEFT JOIN Installments_Table I ON c.id=I.customer_id ORDER BY c.id DESC LIMIT 1

若要添加列表的限制,则只设置限制,否则保留限制部分。直到我得到你的问题,这将是帮助你。否则,您的问题可能是其他问题。

您可以这样做

SELECT c.*,I.* FROM Customer_Table c LEFT JOIN Installments_Table I ON c.id=I.customer_id ORDER BY c.id DESC LIMIT 1
SELECT cust.*,inst_disp.* FROM Customer AS cust
LEFT  JOIN (
          SELECT MAX(id) AS in_id, customer_id 
            FROM installments 
          GROUP BY customer_id
       ) inst
    ON inst.customer_id  = cust.id
LEFT JOIN installments as inst_disp ON inst_disp.id = inst.in_id

若要添加列表的限制,则只设置限制,否则保留限制部分。直到我得到你的问题,这将是帮助你。否则你的问题可能是别的。

听起来你想加入
JOIN
。听起来你想加入
JOIN
。效果很好。谢谢工作得很有魅力。谢谢
SELECT cust.*,inst_disp.* FROM Customer AS cust
LEFT  JOIN (
          SELECT MAX(id) AS in_id, customer_id 
            FROM installments 
          GROUP BY customer_id
       ) inst
    ON inst.customer_id  = cust.id
LEFT JOIN installments as inst_disp ON inst_disp.id = inst.in_id