Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
J'ai un gros problème qui me prend la tête depuis plusieurs jours. Alors pour faire simple j'ai une requête avec un certain nombre de jointures. Jusqu'ici tout va bien...
Voici la requête en question :
public function lister($start,$limit,$sort,$where) { $select = $this->select (); $select->from ( 't_client','*' ) ->setIntegrityCheck ( false ) // ->distinct() ->join ( 't_representant', 't_client.id_representant=t_representant.id_representant', 'nom_representant' ) ->join ( 't_type_client', 't_client.id_type_client=t_type_client.id_type_client', 'type_client' ) ->join ( 't_delais_paiement', 't_client.id_delais_paiement=t_delais_paiement.id_delais_paiement', 'delais_paiement' ) ->join ( 't_mode_paiement', 't_client.id_mode_paiement=t_mode_paiement.id_mode_paiement', 'mode_paiement' ) ->joinleft ( 't_rib', 't_client.id_client=t_rib.id_client', array('titulaire_rib', 'code_banque_rib','code_guichet_rib','num_compte_rib','cle_rib_rib','iban_rib', 'bic_rib', 'nom_banque_rib')) //->joinleft ( ) ->joinleft ( 't_secteur_client', 't_secteur_client.id_client = t_client.id_client', 't_secteur_client.id_secteur') ->joinleft ( 't_secteur', 't_secteur.id_secteur = t_secteur_client.id_secteur', array('t_secteur.design_secteur') ) //->group('id_client') ->order ('id_client ASC') ->where ($where) ->limit($limit, $start); $rows = $this->fetchAll( $select )->toArray(); return $rows; }
J'ai donc ma table t_client lié à 4 tables avec des relation 0 - N ou 1 - N, la pas de soucis avec mes jointures je récupère les champs qui m'intéresse grâce aux IDs présent dans ma table client.
Par contre la relation N - N entre ma table t_client et t_secteur (donc avec une table intermédiaire t_secteur_client) me pose problème. Lorsque je fais mes 2 "joinleft" je récupère bien ce que je veux c'est à dire : tous les champs de ma table client plus les jointures... Sauf que pour mes secteurs un client peut être associé à plusieurs secteurs, je me retrouve donc avec un résultat sur plusieurs lignes pour un même client !
Je voudrais arriver à afficher un seul client en regroupant dans un seul champs les un ou plusieurs "secteurs" de mon client.
J'ai pensé à faire un GROUP_CONCAT qui fait exactement ce que j'ai besoin, mais j'utilise postgreSQL... J'ai essayé différentes sortes de SELECT avec des GROUP BY ou des DISTINCT mais je n'arrive pas à obtenir ce que je veux. J'ai également pensé à des requêtes imbriquées mais je ne sais pas trop comment m'y prendre avec le composant Db de Zend. J'ai même pensé à traiter tout ça en PHP... Bref je ne sais plus quoi faire.
Merci d'avance...
Hors ligne
GROUP_CONCAT est une fonction propre à MySQL qui n'existe pas dans les autres moteurs ce n'est pas dans la norme à ma connaissance
A+JYT
Hors ligne
Oui, je sais mais je cherchais un moyen de faire la même chose avec mon postgrSQL... Bon du coup j'ai un traitement avec des tableaux en PHP...
Hors ligne