DISTINCT sur un seul champ, parmi plusieurs champs

Fermé
Jeremyb36 - 13 août 2018 à 14:25
 Jeremyb36 - 13 août 2018 à 15:42
Bonjour,

Je vous sollicite, j'ai un souci concernant la méthode DISTINCT. J'ai une requête SQL sous forme d'un framework PHP (Zend). Je résume ma table,

public function getByDemande($idDemande, $typeTiers) {

$select = $this -> newSelect(true);
$select -> from(array('d' => 'Demande'));
$select -> join(array('s' => 'Suivi'), 'd."idDemande" = s."idDemande"');
$select -> join(array('t' => $typeTiers),'d."idContact" = t."idTiers"');
$select -> joinLeft(array('tet' => 'TelephoneTiers'), 't."idTiers" = tet."idTiers"');
$select -> joinLeft(array('mt' => 'MailTiers'), 't."idTiers" = mt."idTiers"');
$select -> join(array('at' => 'AdresseTiers'), 't."idTiers" = at."idTiers"');
$select -> where('d."idDemande" = s."idDemande"', $idDemande);
$select -> where('d.actif is true');
$select -> order('s.dateHeure DESC');

//$resultat = $select->__toString();
//echo "$resultat\n";

return $this->fetchAll($select);
}


Dans la forme, chaque idTiers peut posséder plusieurs mails (MailTiers) et plusieurs numéros téléphones(TelephoneTiers). Seulement en l'état actuel, cela me sort en résultat plusieurs lignes avec plusieurs mêmes numéros téléphones pour le même idTiers.

Ce que je recherche, c'est de faire en sorte que chaque numero de téléphone d'un idTiers soit unique, avec d'autres numéros de téléphone différents (exemple, une ligne d'un numéro de téléphone fixe, une ligne d'un numéro de téléphone portable, et une ligne d'un numéro de fax). Et je veux pouvoir mettre un DISTINCT sur la table TelephoneTiers.

Pour le moment, je n'ai pas mis de DISTINCT, afin que vous puissez visualiser la requête.

Merci d'avance pour votre/vos aide(s)!

1 réponse

yg_be Messages postés 23323 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 12 novembre 2024 Ambassadeur 1 552
13 août 2018 à 15:25
bonjour, suggestion:
joinLeft(array('tet' => 'TelephoneTiers'), 't."idTiers" = tet."idTiers"', 'DISTINCT tel')

tel étant le nom du champ à récupérer dans la table TelephoneTiers
0
Ah, merci encore, je n'y avais pas pensé a ce genre de syntaxe. Je m'en vais tester ça et je vous redis après.
0
Bon malheureusement, après test, cela ne fonctionne, car en bug d'erreur cela indique que la colonne tet.DISTINCT idTelephone n'existe pas (idTelephone étant le nom de champ indiqué sur pgAdmin de la table TelephoneTiers dont j'ai fait l'alias " tet")
0