2017-06-13 145 views
0

我有两个表,其中包含customers和installments.i.e的名称。根据另一个SQL查询的结果执行查询

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。我试过子查询的事情,但不支持多行。我尝试将所有客户ID存储在PHP中的数组中,并使用“IN”,但因为客户数超过3000,所以它会花费太长时间并返回超出执行时间的错误。 任何形式的帮助或提示将非常感激。由于

+1

听起来你想要一个'JOIN'。 – Dai

回答

2
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 
+0

工作就像一个魅力。谢谢! – Sam57

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 

。直到我有你的问题,这将帮助你。否则你的问题可能是别的。

0
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 
相关问题