Page 1 sur 1

Je n'arrive pas a réunir en une occurrence les artisans qui ont plusieurs métiers.

Posté : 18 juil. 2022, 17:28
par GasconWarrior
Bonjour,

J'ai un petit problème qui m'embête depuis ce matin.
Je veux afficher une liste d'artisans qui font parti d'un même secteur (ici gros-oeuvre). J'ai réussi a faire une requête qui me récupère toutes les infos voulues mais mon problème c'est que certains artisans ont plusieurs corps de métier (par exemple un est terrassier mais aussi couvreur et charpentier) du coup ca me génère plusieurs lignes avec le même artisan.
Ce que je voudrais c'est plutôt une ligne par artisan et quand il pratique plusieurs métiers , les regrouper séparés par un espace, et c'est là que je sèche.


Et le résultat:

0 =>
array (size=9)
'raison_sociale' => string 'Peroto' (length=7)
'logo' => string 'Peroto_logo.jpg' (length=16)
'id' => string '3' (length=1)
'prenom' => string 'Aurélie & Didier' (length=27)
'nom' => string 'Peroto' (length=7)
'libelle' => string 'Terrassier' (length=10)
'specialite' => string 'Gros oeuvre' (length=11)
1 =>
array (size=9)
'raison_sociale' => string 'SARL Jean Luc' (length=17)
'logo' => string 'Carte+de+visite+recto.jpg' (length=25)
'id' => string '21' (length=2)
'prenom' => string 'Jean' (length=4)
'nom' => string 'Luc' (length=7)
'libelle' => string 'Charpentier' (length=11)
'specialite' => string 'Gros oeuvre' (length=11)
2 =>
array (size=9)
'raison_sociale' => string 'SARL Jean Luc' (length=17)
'logo' => string 'Carte+de+visite+recto.jpg' (length=25)
'id' => string '21' (length=2)
'prenom' => string 'Jean' (length=4)
'nom' => string 'Luc' (length=7)
'libelle' => string 'Couvreur' (length=8)
'specialite' => string 'Gros oeuvre' (length=11)
3 =>
array (size=9)
'raison_sociale' => string 'SARL Jean Luc' (length=17)
'logo' => string 'Carte+de+visite+recto.jpg' (length=25)
'id' => string '21' (length=2)
'prenom' => string 'Jean' (length=4)
'nom' => string 'Luc' (length=7)
'libelle' => string 'Constructeur bois' (length=17)
'specialite' => string 'Gros oeuvre' (length=11)


Si quelqu'un peut m'aider a me débloquer ce serait super. 8-|
Merci

Re: Je n'arrive pas a réunir en une occurrence les artisans qui ont plusieurs métiers.

Posté : 19 juil. 2022, 11:13
par ynx
Bonjour,

Tu devrais pouvoir utiliser GROUP_CONCAT et GROUP BY dans ta requête pour regrouper les libelles : https://sql.sh/fonctions/group_concat

Re: Je n'arrive pas a réunir en une occurrence les artisans qui ont plusieurs métiers.

Posté : 19 juil. 2022, 11:53
par Dsynx
Effectivement le mieux c'est d'effectuer se travail coté BDD sinon coté PHP
$liste = [
0 => [
'raison_sociale' =>  'Peroto' ,
'logo' =>  'Peroto_logo.jpg',
'id' =>  '3' ,
'prenom' =>  'Aurélie & Didier' ,
'nom' =>  'Peroto',
'libelle' =>  'Terrassier' ,
'specialite' =>  'Gros oeuvre']
,
1 =>[
'raison_sociale' =>  'SARL Jean Luc' ,
'logo' =>  'Carte+de+visite+recto.jpg' ,
'id' =>  '21' ,
'prenom' =>  'Jean',
'nom' =>  'Luc' ,
'libelle' =>  'Charpentier' ,
'specialite' =>  'Gros oeuvre' ]
,
2 =>[
'raison_sociale' =>  'SARL Jean Luc' ,
'logo' =>  'Carte+de+visite+recto.jpg' ,
'id' =>  '21' ,
'prenom' =>  'Jean' ,
'nom' =>  'Luc' ,
'libelle' =>  'Couvreur' ,
'specialite' =>  'Gros oeuvre' ]
,
3 =>[
'raison_sociale' =>  'SARL Jean Luc', 
'logo' =>  'Carte+de+visite+recto.jpg' ,
'id' =>  '21' ,
'prenom' =>  'Jean' ,
'nom' =>  'Luc' ,
'libelle' =>  'Constructeur bois' ,
'specialite' =>  'Gros oeuvre']
];

//var_dump($liste);
$filtre_specialite = 'Gros oeuvre';
$tableau_par_id = array();
foreach($liste as $cle => $valeur){
	if($valeur['specialite'] ==  $filtre_specialite) {
	   $tableau_par_id[$valeur['id']][] = $valeur['libelle'];
	}
}

var_dump($tableau_par_id);

----------------------------
/* Résulta:
array(2) {
  [3]=>
  array(1) {
    [0]=>
    string(10) "Terrassier"
  }
  [21]=>
  array(3) {
    [0]=>
    string(11) "Charpentier"
    [1]=>
    string(8) "Couvreur"
    [2]=>
    string(17) "Constructeur bois"
  }
}

*/
Avec l'id tu pourras retrouvé la personne le tableau n'est là que pour récolté les libelle multiple

Re: Je n'arrive pas a réunir en une occurrence les artisans qui ont plusieurs métiers.

Posté : 19 juil. 2022, 16:32
par GasconWarrior
Bonjour,

Tu devrais pouvoir utiliser GROUP_CONCAT et GROUP BY dans ta requête pour regrouper les libelles
Super! Merci beaucoup!
J'ai enfin réussi, j'avais essayer avec GROUP BY mais j'avais pas combiné avec GROUP_CONCAT du coup ca marchait pas..
Maintenant j'obtiens le résultat attendu.

Bonne journée et merci encore.