Création fonction

Petit nouveau ! | 7 Messages

26 févr. 2020, 01:18

Bonjour à tous,
je débute en php et je cherche une fonction qui me permettrait de faire ceci :
je voudrais arriver à afficher le theme une seul fois si celui-ci est present plusieurs fois

Exemple BD :
Nom | theme
---------------------------
nom1 | jouet
nom2 | jouet
nom3 | bijoux
nom4 | jouet

Exemple après récupération des donnée
Je voudrais afficher comme ceci
THEME : jouet, bijoux

Et non comme ceci
THEME : jouet, jouet, bijoux, jouet
Si quelqu'un pourrais me donner une piste.
merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

26 févr. 2020, 02:34

Il y a plusieurs façon de faire, ça dépend de la taille de ta table et si tu as beaucoup de thèmes différents.

Si tu n'as pas beaucoup de thème, tu pourrais faire celà en 2 phases :
1) tu récupères la liste des thèmes sans doublon en SQL, grâce à la fonction GROUP BY https://sql.sh/cours/group-by
2) ensuite tu fais une boucle foreach() et pour chaque thème récupéré, tu fais une autre requête SQL avec un SELECT pour récupérer les noms associés à chaque thème

Cette approche fonctionne bien si tu as pas beaucoup de thèmes différents.

Si tu as beaucoup de thèmes (plusieurs centaines), alors cela va générer beaucoup de requêtes SQL et le plus efficace sera alors probablement de faire une seule requête qui récupère tout, et ensuite un traitement PHP qui ferait les actions suivantes :
1) tu initialises un tableau vide par exemple $data=array();
2) tu fais une boucle sur chaque ligne de ta table avec foreach() ou while() comme tu veux
3) au sein de la boucle tu fais $data[$theme][]=$nom pour créer un tableau multidimensionnel qui va contenir chaque thème et pour chaque thème un tableau avec les noms
4) A la fin de ta boucle de traitement tu as juste à afficher $data, déjà via un var_dump($data) pour vérifier que tu obtiens bien ce que tu veux et ensuite avec des boucles foreach() si tu veux faire une présentation propre.
Quand tout le reste a échoué, lisez le mode d'emploi...