2017-06-13 18 views
0

私は顧客名とinstallments.i.eの2つのテーブルを持っています。別の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 
関連する問題