Rêquete SQL: nombre d'occurences sur 2 tables

Résolu
jonnefoy -  
 jonnefoy -
Bonjour,

Voici mes 2 tables:

|tags
|-id (primary)
|-value
|-date_ajout


|tags_relation
|-id_tag (primary)
|-id_news (primary)


Je voudrais avoir la liste des tags de la table TAGS classer par le nombre d'occurrences de id_tag dans la table TAGS_RELATIONS.

J'ai tenté :
SELECT t.*, r.id_tag, COUNT(r.id_tag) as tag_count
FROM tags t, tags_relations r
WHERE t.id = r.id_tag
ORDER BY 'tag_count' desc

Mais comme vous le devinez (sinon je poserai pas la question :) ) cela ne fonctionne pas.

Si vous avez une idée je vous en remercie par avance.

Bonne journée !

1 réponse

  1. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    Bonjour,

    Il faut utiliser la clause GROUP BY

    SELECT t.id, t.value, count(*) as tag_count
    FROM tags t
    LEFT OUTER JOIN tags_relations r ON t.id = r.id_tag
    GROUP BY t.id, t.value

    Il y a quelques nuances aussi qui dépendront de ton SGBD, donc si ça ne marche pas dis-nous avec lequel tu travailles.

    Xavier

    PS : Il y a un forum « Bases de données » qui est plus adapté à ce genre de question :)
    1
    1. jonnefoy
       
      Au TOP ! =)

      Merci beaucoup Xavier !
      Désolé d'avoir posté dans la mauvaise catégorie.

      Pour info:
      Cette requête est utilisé sous MySQL

      La requête finale est :
      version Mysql :
      SELECT 't'.'id', 't'.'value', count(*) as tag_count
      FROM ('tags' t)
      LEFT OUTER JOIN 'tags_relations' r ON 't'.'id' = 'r'.'id_tag'
      GROUP BY 't'.'id', 't'.'value'
      ORDER BY 'tag_count' desc


      Version Active Record (pour codeIgniter) :
      $this->db->select('t.id, t.value, count(*) as tag_count')
                                  ->from('tags t')
                                  ->join('tags_relations r', 't.id = r.id_tag', 'left outer')
                                  ->group_by('t.id, t.value')
                                  ->order_by('tag_count', 'desc')
                                  ->get()
                                  ->result();


      Bonne journée !
      et encore merci !
      0