[RESOLU] Group By Separator

Eléphant du PHP | 111 Messages

22 mars 2021, 17:59

Bonjour,

J'essaie de récupérer les valeurs dans ma table et de les grouper
$query = "SELECT Des, Parts, Fam FROM pieces where (

        Fam LIKE '".$name."' OR Des LIKE '".$name."' OR Parts LIKE '".$name."') 

    AND (Fam LIKE '".$name2."' OR Des LIKE '".$name2."' OR Parts LIKE '".$name2."') 

    AND (Fam LIKE '".$name3."' OR Des LIKE '".$name3."'OR Parts LIKE '".$name3."') GROUP BY (Fam ) ";
Là ça marche
Comme j'ai lu qu'il fallait faire comme ça
SELECT `id`, GROUP_CONCAT( `nom_colonne` SEPARATOR ' ' )
FROM `table`
GROUP BY `id`

J'essaie de rajouter un séparateur et là j'ai des erreurs fatales sur ma requête
$query = "SELECT Des, Parts, GROUP_CONCAT( `Fam` SEPARATOR ' | ' ) FROM pieces where (....

Il m'envoie bouler
! ) Notice: Undefined index: Fam in C:\wamp64\www\RecBdd\parts2.php on line 89

Eléphant du PHP | 111 Messages

22 mars 2021, 18:33

là cela fonctionne
$query = "SELECT * FROM pieces where (Fam LIKE '".$name."' OR Des LIKE '".$name."' OR Parts LIKE '".$name."') GROUP BY Parts";
Mais je ne peux pas choisir le séparateur il colle les valeurs dans Fam sans espace ni rien

Eléphant du PHP | 111 Messages

22 mars 2021, 19:01

En fait cela fonctionne parfaitement sur la SQL en ligne mais pas sur la SQL de Wamp.

Donc résolu magiquement

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 mars 2021, 19:55

Salutations !

La fonction GROUP BY a pour objectif d'indiquer au moteur SQL quelles champs de ta requête ne sont pas agrégés par une fonction (count, avg, sum...) et doivent faire l'objet d'un regroupement. Ces champs doivent être mentionnés explicitement, et un " SELECT * " est à proscrire avec un GROUP BY (même MySQL semble gérer le group by à sa façon, ce qui peut parfois donner des résultats intéressant)

Le message d'erreur que tu as obtenu " Notice: Undefined index: Fam " t'indique simplement que php ne trouve pas d'index nommé Fam dans le résultat de ta requête. Et pour cause, tu ne retournes pas la valeur de Fam, mais une chaine concaténée " GROUP_CONCAT( `Fam` SEPARATOR ' | ' ) " qui n'a pas de nom. Il te suffit d'ajouter un alias à cette colonne virtuelle pour que php puisse l'utiliser : " GROUP_CONCAT( `Fam` SEPARATOR ' | ' ) AS ma_colonne_groupee "
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...