Bonjour tout le monde,
Je reprends du code PHP de quelqu'un, et ce code contient une requête SQL que j'ai du mal à comprendre :
C'est surtout cette partie que je ne comprends pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 $sql = "SELECT pl.*, l.loyer, l.charges, l.locataire_id, laire.nom, laire.prenom, l.chambre_id, c.numero, c.etage, c.maison_id, m.titre_crm FROM ( SELECT spl.id, spl.location_id, spl.mois, spl.annee, spl.loyer_paye from locations sl LEFT JOIN ( SELECT * FROM paiement_loyer union SELECT 9999, usl.id, (MONTH(NOW())-1), YEAR(NOW()), 0 FROM locations usl WHERE usl.id not in(SELECT location_id FROM paiement_loyer) || (select count(*) FROM paiement_loyer WHERE location_id=usl.id AND annee=YEAR(NOW()) AND mois=(MONTH(NOW())-1) ) = 0 ) spl ON sl.id=spl.location_id where sl.date_debut <=CURDATE() && CURDATE() <=sl.date_fin ) pl JOIN locations l ON pl.location_id = l.id JOIN locataires laire ON l.locataire_id = laire.id JOIN chambres c ON l.chambre_id = c.id JOIN maisons m ON c.maison_id = m.id ORDER BY trim(upper(m.titre_crm)), c.numero, annee, mois";
En fait, le but est de vérifier qu'un mois ne contient pas de numéro de facture, dans ce cas, on affiche le mois avec comme loyer payé 0 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 SELECT spl.id, spl.location_id, spl.mois, spl.annee, spl.loyer_paye from locations sl LEFT JOIN ( SELECT * FROM paiement_loyer union SELECT 9999, usl.id, (MONTH(NOW())-1), YEAR(NOW()), 0 FROM locations usl WHERE usl.id not in(SELECT location_id FROM paiement_loyer) || (select count(*) FROM paiement_loyer WHERE location_id=usl.id AND annee=YEAR(NOW()) AND mois=(MONTH(NOW())-1) ) = 0 ) spl ON sl.id=spl.location_id where sl.date_debut <=CURDATE() && CURDATE() <=sl.date_fin ) pl
Le résultat de cette requête donne ceci :
Pour info, le mois 0 est janvier, 1 février...
Si on pouvait simplifier la requête SQL ou la transformer en PHP, je dis pourquoi pas...
Merci d'avance.
bee
Partager