Je fais appel à vous suite à un problème qui ne m'est jamais arrivé auparavant et je n'arrive pas à le résoudre. J'ai une base de donnée contenant des écritures comptables triées par mois.
A l'affichage de mon tableau, j'ai plusieurs écritures avec la même date : 030108 (03 janvier 2008). Une seule de ces écritures apparait dans le tableau comme si il n'acceptait pas les doublons.
Je n'arrive pas à savoir d'où cela peut provenir et j'espère que vous pourrez men dire plus à ce sujet.
J'ai trouvé ! Mais je n'arrive tout de même pas à comprendre et si vous avez une explication à ceci, elle est la bienvenue !! Il suffit d'enlever le GROUP BY pour voir apparaître de nouveau toutes les écritures.. Bizarre ?
GROUP BY fait partie de ce qui s'appelle "Agrégation avec regroupement".
Avec votre requête :
SELECT date,compte,libelle,debit,credit FROM sg WHERE date LIKE "%%0108" GROUP BY date
vous "regrouper" tous les comptes de même date (GROUP BY date), mais, comme vous n'effectuer aucune demande de nombre ou de concaténation, vous n'obtenez que le premier compte pour une date donnée, même s'il y en a plusieurs.
Avec une requête comme celle-ci (Pur exemple) :
$sql = "SELECT date AS ma_date, GROUP_CONCAT(CONCAT('Compte : ',compte,' Libellé : ',libelle,' Débit : ',debit,' Crédit :',credit) ORDER BY compte SEPARATOR '\n') AS liste FROM sg WHERE date LIKE '%0108' GROUP BY date"; $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); while($data = mysql_fetch_assoc($req)) { extract($data); echo $ma_date." - ".$liste; }
Vous aurez toutes les écritures groupées par date.
Remarques : - Pourquoi avoir écrit LIKE "%%0108" alors que % signifie : aucun, un ou plusieurs caractères quelconques - Vos dates sont écrites en texte, pas au format date