Bonjour !
Alors habituellement, on demande à compter le nombre d'occurences dans une table, mais là c'est un peu différent.
J'ai une table articles, donc avec plusieurs enregistrements dedans. Et pour chaque j'ai un champ "tags", référence aux mots clés, donc chaque article peut avoir plusieurs tags, séparés par une virgule genre : argent,maison,tralala
Ce que j'aimerai faire, c'est sélectionner tous les tags de tous les articles, les regrouper et les compter.
Sur le papier, ça parait facile, mais en code, j'arrive pas à avoir la méthodologie.
Merci de votre aide :)
+--------------------------------------------+
| ARTICLES |
+---------+---------------+------------------+
| ID | Titre | Tags |
+---------+---------------+------------------+
| 1 | Article 1 | Argent, Maison |
| 2 | Article 2 | Maison, Amis |
| 3 | Article 3 | |
| 4 | Article 4 | Argent |
| 5 | Article 5 | Assiettes, Amis |
+---------+---------------+------------------+
Salut !
Pourquoi ne pas avoir fait une table TAGS et une table ARTICLES_TAGS (qui stocke les clés des 2 autres) ?
Tu aurais plus de possibilités je pense, et plus de soucis de comptage.
Sinon, regarde la fonction SUBSTRING_INDEX pour MySQL
Cordialement,
Gasp.
Salut !
Je suis d'accords avec Gaspard, tu va devoir gérer ton champ tags comme une chaîne de caractère là alors qu'avec une tables tags dédié tu n'auras qu'à faire une requête du genre :
SELECT COUNT(*) FROM tags WHERE article_id = 1
Tu pourras aussi faire des requêtes beaucoups plus complexes avec des GROUP BY par exemple.
Voilà
++
Clairement, et puis pour l'affichage tu pourras mieux gérer ça aussi, tu pourras les afficher un par un, faire des liens pour chaque etc..
Je trouvais chiant l'idée de créer une table entièrement pour des tags, créer toutes les requêtes d'insertions dans la table mots clés au moment de l'insertion dans la table articles en parallèle et d'établir les correspondances avec la table articles.
Alors que là, tout était stockés dans la même, l'idée était juste de les sélectionner et les compter
C'est pourtant l'idée la plus adaptée.
Tu en fait quoi de tes tags après, mis à part les compter ?
Faire une mini recherche, mais l'idée était la même. J'aurai sélectionner les articles ayant le "tag" compris dans le champ tags de la table.
De plus j'utilise une API pour les tags (bootstrap tags input, ou quelque chose comme ça)
Nan mais si j'ai dit que j'utilisais ça, c'est que le résultat se retourne sous forme de tag1,tag2,tag3.
Donc dés la création de l'article, j'aurai du faire un explode ',' et vérifier si les tag n'existait pas déjà et les créer pour chaque, c'est un peu le bordel je trouve
Alors ? Une petite idée pour aller dans mon sens ? Ca m'embête vraiment de tout recoder juste pour les tags :/
Lol, j'ai eu la même idée que toi Genki enfin a peu près. :)
Je suis un noob... mais vraiment Grafik il change ma vie...
En fait ton idée (et la mienne) de stocker plusieurs tags avec un délimitateur dans un champ c'est pas la bonne. Ils ont raison, faut pas essayer de vouloir mettre le maximum d'info dans une table, vaut mieux en faire plusieures avec des champs id pour les lier.
Mais ce que j'ai fais moi pour gérer mon champ "Tags" pourris avec mes délimitateurs (moi ";"), j'ai choppé DataTables, ca permet de générer un tableau triable dans tout les sens et y a un champ recherche "magique". Tu tapes ce que tu veux, ca cherche dans tous les champs, peu importe l'ordre de saisie. Et pour mon champ tag, je me suis pas fais chier à le manipuler en PHP, je l'injecte tel quel comme donnée dans mon tableau HTML mais je hide le champ du tableau... comme ca c'est propre, enfin... ca a l'air :).
GRAFIK EST MAGIQUE !!!