2017-06-13 144 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 
相關問題