IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé Avatar de d-Rek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2007
    Messages : 438
    Points : 455
    Points
    455
    Par défaut 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é
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Points : 835
    Points
    835
    Par défaut
    Bonjour,
    Tu ne peux pas normaliser ces informations :
    les mettres chacun dans une table ?

    Z.

  3. #3
    Membre confirmé Avatar de d-Rek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2007
    Messages : 438
    Points : 455
    Points
    455
    Par défaut
    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é
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Points : 835
    Points
    835
    Par défaut
    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.

  5. #5
    Membre confirmé Avatar de d-Rek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2007
    Messages : 438
    Points : 455
    Points
    455
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Nombre d'occurences dans une chaîne de caractères
    Par Olivier14 dans le forum Langage
    Réponses: 4
    Dernier message: 20/03/2006, 19h11
  2. Compter le nombre de caracteres dans un champs
    Par joxbl dans le forum Langage SQL
    Réponses: 1
    Dernier message: 24/02/2006, 14h37
  3. [AS] Nombre d'occurences dans une string
    Par frol dans le forum Flash
    Réponses: 3
    Dernier message: 26/12/2005, 15h13
  4. Connaitre le nombre de caractère ";" dans un champ
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 25/11/2004, 17h36
  5. recherche du nombre d'occurences dans une table
    Par berry dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/01/2004, 20h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo