Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Nombre d'occurences dans un champ


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Nombre d'occurences dans un champ
    Bonjour à tous,

    Afin de réaliser un nuage de mots clés (tag cloud), j'ai besoin de sortir les X occurrences les plus fréquentes d'un champ tag contenant des tags séparés par une virgule.
    Si vous avez des idées.. moi je sèche.

  2. #2
    Membre éclairé
    Bonjour,
    Tu ne peux pas normaliser ces informations :
    les mettres chacun dans une table ?

    Z.
    Bioinformaticien
    Grappe de calcul SUN 160 coeurs headless + jbod ZFS RAIDZ
    Serveurs DL385G2 Ubuntu serveur + Docker

  3. #3
    Membre confirmé
    J'ai trouvé une solution "alternative".
    Code PHP :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $query=mysql_query("SELECT tag FROM ma_table");
    if(mysql_num_rows($query)!=0){
    	$ar=array();
    	while($result=mysql_fetch_array($query)){
    		$temp=explode(',', $result['tag']);
    		if(is_array($temp)){
    			for($i=0;$i<count($temp); $i++){
    				$ar[trim($temp[$i])]=(isset($ar[$temp[$i]]))?($ar[$temp[$i]]+1):1;
    			}
    		}
    	}
    	tag_cloud($ar);
    }

    Pour la fonction tag_cloud, j'ai modifié celle issue de ce site : pckult.net en passant directement après la mise en tableau des résultats de la requête.

    Zwiter> Tu veux dire mettre un tag par enregistrement dans une table tag.
    Je trouve ça moins pratique pour la gestion des liaisons avec les articles (modification, ajout et suppression de tags).
    Mais, je ne suis probablement pas normal

  4. #4
    Membre éclairé
    tu as une table article avec ton article, ou ce que tu veeux.
    Tu as une table tag, avec ton tag, et eventuellement des infos dessus.
    Et enfin une table tag_article qui contiendra uniquement les champs id du tag et id de l'article.

    Donc pour selectionner les tags d'un article :
    SELECT tag_name
    FROM tag, tag_article, article
    WHERE tag.id_tag=tag_article.id_tag AND article.id_article=tag_article.id_article;

    Selectionner tous les tags avec leurs occurences :
    SELECT tag_name, count(*) AS occurences
    FROM tag, tag_article
    WHERE tag.id_tag=tag_article.id_tag
    GROUP BY tag_name
    ORDER BY occurences DESC;

    Et pour finir :
    Selectionner les 10 1er tags :
    Selectionner tous les tags avec leurs occurences :
    SELECT tag_name, count(*) AS occurences
    FROM tag, tag_article
    WHERE tag.id_tag=tag_article.id_tag
    GROUP BY tag_name
    ORDER BY occurences DESC
    LIMIT 10;

    Question subsidiaire que je te laisse cogiter (ca pourrais te concerner dans la solution que tu as choisi) :
    Tes 20 1ers tags ont tous une occurence de 1 : lesquels selectionnes tu si tu veux les 10 1ers ?

    Z.
    Bioinformaticien
    Grappe de calcul SUN 160 coeurs headless + jbod ZFS RAIDZ
    Serveurs DL385G2 Ubuntu serveur + Docker

  5. #5
    Membre confirmé
    Je botte en touche !
    Moi je fais pas de limit, j'affiche tous les tags.
    Etant une personne sensée, je ne vais pas avoir 300 tags

###raw>template_hook.ano_emploi###