Rêquete SQL: nombre d'occurences sur 2 tables [Résolu/Fermé]

Signaler
-
 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

Messages postés
3628
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
22 septembre 2020
969
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60769 internautes nous ont dit merci ce mois-ci

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 !