Lister des tags

Signaler
Messages postés
74
Date d'inscription
dimanche 2 avril 2006
Statut
Membre
Dernière intervention
23 juin 2010
-
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
-
Bonjour!
Je suis en train de creer un script de news, qui se présente comme ca:
Table articles: id|titre|contenu[...]|tags
La colonne tags contient une variable avec les tags de l'article sous cette forme: Test, Défaut, Vive, PHPCS, Allez, Les, bleus etc.

Ce que je souhaite faire c'est récuperer tous les tags de tous les articles, puis les mettres sous cette forme sans doublons:

["Tags 1", "Tags 2", (...)]

Si vous n'avez pas compris n'hésitez pas!

7 réponses

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
salut

ta base de donnee est mal foutue : tu as plusieurs tags dans un seul champ.

tu aurais du faire une table tags (id, texte, id_article)
Messages postés
74
Date d'inscription
dimanche 2 avril 2006
Statut
Membre
Dernière intervention
23 juin 2010

oui mais la si il y a 200 articles, à 10 tags par articles ca commence à faire beaucoup...
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
27
Salut,


2000 = beaucoup ??


Ce qui risque de faire beaucoup c'est le traitement PHP pour mettre en forme.


Ce que tu peux faire :
$q = mysql_query("SELECT tags FROM articles");

$arr_tags = array();


while ($r = mysql_fetch_array($q, MYSQL_NUM)) {

  $tags = explode(',', $r[0]);

  $arr_tags = array_merge($arr_tags, $tags);

}


array_unique($arr_tags);


// traitement avec un foreach pour produire la chaine rechercher

foreach($arr_tags as $k=>$v) {

  echo $v.', ';

}
(+ virer la dernière virgule)


J'ai écrit ça un peu à l'arrache et je n'ai pas testé, mais ça devrait fonctionner.


Cordialement,

Kohntark -
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
en mysql, j'ai deja vu des tables avec 4 000 000 de lignes.

mysql> SELECT COUNT(*) FROM clients;
+----------+
| COUNT(*) |
+----------+
|     1698 |
+----------+

mysql> SELECT COUNT(*) FROM encaissements;
+----------+
| COUNT(*) |
+----------+
|     9811 |
+----------+

mysql> SELECT COUNT(*) FROM passage_prestation;
+----------+
| COUNT(*) |
+----------+
|    11705 |
+----------+

2000 lignes, c'est rien...

j'arrive a faire des extractions avec 4 ou 5 jointures sur un p2 400 mhz en quelques secondes, et ca, sans avoir mis AUCUN index autre que les primary keys...
Messages postés
74
Date d'inscription
dimanche 2 avril 2006
Statut
Membre
Dernière intervention
23 juin 2010

en fait je doit simplifier le code au max, mais si j'utilise cette méthode c'est principalement pour avoir le moins de requetes possibles, par exemple lorsqu'on fais voir les articles par tag, avec votre méthode on fais 2 requete par tag par article...
donc je redemande en plus simple, comment comparer deux tableaux, ajouter au deuxième les valeurs du premier qui ne sont pas dans le deuxième?
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
27
donc je redemande en plus simple, comment comparer deux tableaux,
ajouter au deuxième les valeurs du premier qui ne sont pas dans le
deuxième?
C'est quoi qui ne va pas avec la méthode que je te propose ?

on fais 2 requete par tag par article...
Je ne comprends pas bien là, tu peux préciser ?

Kohntark-
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
thedeejay, tu peux le faire en une seule requete avec ma methode, suffit de faire une requete imbriquee ou une jointure.

et comme tu le vois, ta methode (en plus de ne pas etre semantique) pose BEAUCOUP PLUS de problemes.

donc est-elle reellement plus simple ?