2016-06-16 8 views
0

Ich habe diese funktionierende Abfrage, die Daten so generiert, wie ich es möchte, aber jetzt möchte ich eine weitere Klauselanweisung hinzufügen, die Zeilen von tbl_loan_master erhält, die nicht auf der tbl_loanledger war . DatenZeilen erhalten, die nicht in einer anderen Tabelle übereinstimmen

Beispiel:

tbl_borrowers

------------------------------------------ 
| id | first_name | last_name | deleted | 
| 1 |  Joe | Smith | 0  | 
| 2 | Lily | Mag | 0  | 
| 3 |  Zen | Green | 0  | 
| 4 | Kim  | Chan | 0  | 
| 5 | Bob  | Mac  | 1  | 
| 6 | Ben  | Cork  | 0  | 
------------------------------------------ 

tbl_loan_master

---------------------------------------------------------------------- 
| id | borrowers_id | loan | date_created | due_date | deleted | 
| 1 |  4  | 300 | 2016/04/28 | 2017/04/28 |  0  | 
| 2 |  1  | 100 | 2016/05/05 | 2017/05/05 |  0  | 
| 3 |  2  | 500 | 2016/06/08 | 2017/06/08 |  0  | 
| 4 |  1  | 200 | 2016/06/13 | 2017/06/13 |  0  | 
| 5 |  3  | 150 | 2016/06/15 | 2017/06/15 |  0  | 
| 6 |  6  | 50 | 2016/06/16 | 2017/06/16 |  0  | 
---------------------------------------------------------------------- 

tbl_loanledger

------------------------------------------------------------------------------ 
| id | borrowers_id | loanmaster_id | payment | balance| date_created | deleted 
| 1 |  4  |  1  | 50 | 250 | 2016/05/28 | 0 
| 2 |  1  |  2  | 20 | 80 | 2016/05/25 | 0 
| 3 |  1  |  2  | 30 | 50 | 2016/06/01 | 0 
| 4 |  2  |  3  | 100 | 400 | 2016/06/09 | 0 
| 5 |  2  |  3  | 50 | 350 | 2016/06/10 | 0 
| 6 |  3  |  4  | 50 | 150 | 2016/06/16 | 0 
------------------------------------------------------------------------------ 

Hier ist die Arbeits query:

$query = "SELECT `tbl_borrowers`.* , `tbl_loanledger`.*, `tbl_loan_master`.* 
    FROM `tbl_borrowers` 
    LEFT JOIN `tbl_loanledger` 
     ON `tbl_borrowers`.id = `tbl_loanledger`.borrower_id 
    LEFT JOIN `tbl_loan_master` 
     ON `tbl_loan_master`.id = `tbl_loanledger`.loanmaster_id 
    WHERE `tbl_borrowers`.deleted = 0 AND `tbl_loanledger`.deleted = 0 AND MONTH (`tbl_loanledger`.date_created) = MONTH(CURRENT_DATE) 
     GROUP BY `tbl_loanledger`.borrower_id 
     ORDER BY `tbl_borrowers`.last_name"; 

Das erwartete Ergebnis ausgibt den Kreditnehmer mit ihrer letzten Transaktion auf dem aktuellen Monat (der Juni ist) in Darlehen Ledger und auch in Form von Darlehen Konten. Wie Ben Cork, der nicht im Kreditbuch ist, ist er auf den Kreditkonten, aber ich möchte ihn auf dem Ergebnis-Set ausgeben. Die gelöschte Spalte bedeutet, wenn sie 0 ist, zeigt sie an, dass sie aktiv ist, wenn sie 0 ist, bedeutet dies, dass sie gelöscht wurde.

Erwartetes Ergebnis:

|First Name | Last Name | Due Date | Balance  | 
| Ben | Cork | 2017/06/16 |  50  | 
| Joe | Smith | 2017/06/13 |  50  | 
| Lily |  Mag | 2017/06/08 |  350  | 
| Zen | Green | 2017/06/15 |  150  | 
+0

'select * from tbl_borrowers eine LEFT JOIN tbl_loanledger b auf a.id = b.borrowers_id wo b.id ist null' –

+0

Ich habe es als Kommentar hinzugefügt, weil ich nicht ganz sicher bin, ob ich die Frage verstehe, die die Abfrage und das Beispiel d gegeben hat ATA und Felder auf diesen Tabellen. –

+0

Sorry über die Verwirrung @JorgeCampos, ich entferne einige der Code auf der Abfrage, die nicht in den Beispieldaten und Felder in der Tabelle enthalten ist. Wenn ich versuche, nur die Where 'tbl_loanledger'.id NULL auf die vorhandene Abfrage hinzuzufügen, werden alle Datensätze nicht angezeigt – zen

Antwort

1

Versuchen Sie folgende;)

select 
    tb.first_name, tb.last_name, coalesce(tlm.Loan, 0) as Loan, coalesce(t.`Amount Paid`, 0) as `Last Amount Paid` 
from tbl_borrowers tb 
left join tbl_loan_master tlm 
on tb.id = tlm.borrowers_id 
left join (
    select t1.* 
    from tbl_loanledger t1 
    inner join (
     select max(id) as id 
     from tbl_loanledger 
     group by borrowers_id, loanmaster_id 
    ) t2 on t1.id = t2.id 
) t 
on tb.id = t.borrowers_id 
and tlm.id = t.loanmaster_id 

SQLFiddle DEMO HERE

+0

hinzu Ich bin sehr überwältigt mit dem Code und der Demo, die Sie @reno zur Verfügung gestellt haben, Sie haben genau die erwartete Ausgabe der Tabelle oben gemacht, aber jetzt habe ich eine harte Zeit, Ihren Code zu verschmelzen mit dem vorhandenen Abfragecode habe ich. Wenn es mit dir ok ist, werde ich die Tabellen oben auf die genauen Details aktualisieren, die auf dem Datensatz angezeigt werden sollen? – zen

+0

OK, mach es einfach. – Blank

+0

Ich habe die Tabelle und auch die Arbeitsabfrage bearbeitet @ reno, es hat Zeit gedauert – zen