[MYSQL] compter champs de tables différentes

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics


sietjp
WRInaute impliqué
WRInaute impliqué
 
Messages: 624
Inscription: 14 Déc 2003

[MYSQL] compter champs de tables différentes

Message le Mer Juil 21, 2004 6:58

Bonjour,
Je n'arrive pas à trouver une requête mySQL pour faire ceci :
j'ai 2 tables table1 et table2

dans table1 et table2 j'ai les même champs suivant (id, authorid)

J'aimerais récupérer une liste du genre ( authorid, nombre d'apparition d'authorid dans les 2 tables table1 et table2)

et pouvoir classer la table par nombre d'apparition d'authorid dans les 2 tables table1 et table2

Merci à vous...

Oncle Tom
WRInaute impliqué
WRInaute impliqué
 
Messages: 812
Inscription: 31 Mar 2003

Message le Mer Juil 21, 2004 7:12

Code: Tout sélectionner
SELECT table1.authorid a1, table2.authorid a2, COUNT(table1.authorid) AS c1, COUNT(table2.authorid) AS c2
FROM table1
LEFT JOIN table2 ON (table2.authorid = table1.authorid)
GROUP BY c1 ASC, c2 ASC;


Voilou pour ce que j'en dis mais c'est pas forcément juste car je ne pense pas qu'il y ait un "lien" direct entre les 2 tables d'où la jointure "gauche".
Si c'est pas ça, tu pourrais expliquer à quoi servent les 2 tables et quelles sont leurs liens ?

yep
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 286
Inscription: 3 Avr 2004

Message le Mer Juil 21, 2004 8:11

COUNT ... AS => cela sert à quoi
LEFT JOIN => pareil, quelle est la différence avec INNER JOIN ?

merci d'avance ;)


sietjp
WRInaute impliqué
WRInaute impliqué
 
Messages: 624
Inscription: 14 Déc 2003

Message le Mer Juil 21, 2004 8:55

The Jedi a écrit:
Code: Tout sélectionner
SELECT table1.authorid a1, table2.authorid a2, COUNT(table1.authorid) AS c1, COUNT(table2.authorid) AS c2
FROM table1
LEFT JOIN table2 ON (table2.authorid = table1.authorid)
GROUP BY c1 ASC, c2 ASC;


Voilou pour ce que j'en dis mais c'est pas forcément juste car je ne pense pas qu'il y ait un "lien" direct entre les 2 tables d'où la jointure "gauche".
Si c'est pas ça, tu pourrais expliquer à quoi servent les 2 tables et quelles sont leurs liens ?

Merci The Jedi, y a une erreur à l'exécution :
MySQL said:
#1056 - Can't group on 'c1'

Pour info cette requête
SELECT table1.authorid a1, COUNT( table1.authorid ) FROM table1 GROUP BY table1.authorid marche pour une seule table, c'est la même chose qui m'intéresserait mais opur les 2 tables à la fois. J'avais bien peur qu'il faille utilise un JOIN, est ce qu'il y aurait un bon tutorial sur le join autre que la référence mysql qui n'est pas trés explicite...

Oncle Tom
WRInaute impliqué
WRInaute impliqué
 
Messages: 812
Inscription: 31 Mar 2003

Message le Mer Juil 21, 2004 10:18

je suis un peu bête là ^^ fais au lieu de grouper sur c1 et c2, groupe sur a1 et a2.

Code: Tout sélectionner
SELECT table1.authorid a1, table2.authorid a2, COUNT(table1.authorid) AS c1, COUNT(table2.authorid) AS c2
FROM table1
LEFT JOIN table2 ON (table2.authorid = table1.authorid)
GROUP BY a1, a2
ORDER BY c1 ASC, c2 ASC;


Le soucis dans l'histoire c'est que tes colonnes a1 et a2 n'ont pas forcément le même nombre de lignes et j'ai peur que s'il y en a plus dans a2, ben ça s'arrêtera à la fin de a1 (chais pas si tu me comprends).



COUNT ... AS

AS sert à (re)définir un nom de champ. Tu peux ne pas le mettre et coller directement le nouveau nom de champ à côté (j'aurais pu écrire "table.authorid AS a1") mais je préfère avec.
Le problème du COUNT() c'est que ça te renvoie un nom de champ à la gomme car ça ne correspond pas à une colonne de ta table. Donc pour réutiliser le résultat après c'est pas gagné.

LEFT JOIN

C'est pareil que le INNER JOIN sauf que, pour le INNER JOIN, ta ligne sera sélectionnée si tu as une correspondance d'une valeur X ET sur la première table, ET sur la deuxième. Si dans la 2° table tu trouves pas le même élément X que dans la première, mysql zappe la ligne.
Avec LEFT (ou RIGHT) JOIN, tu récupère la ligne même si tu trouves pas la correspondance dans la 2° table.

Imagine que t'aies une table avec une liste d'articles et une autre avec une liste de membre. Quand tu affiches un article, tu fais une jointure avec la table des membres pour afficher le pseudo à partir de l'ID contenu dans la première.
Avec l'INNER JOIN, si jamais le membre n'existe plus dans la 2° table, ta requête ne retournera même pas les infos de la table articles.
Avec le LEFT JOIN, ben membre ou pas, t'auras les infos de la table articles et, si elle existent, les infos liées au membre.


sietjp
WRInaute impliqué
WRInaute impliqué
 
Messages: 624
Inscription: 14 Déc 2003

Message le Mer Juil 21, 2004 13:55

La ca passe mais ce ne retourne pas ce que je voulais, le résultat n'est pas clair et je n'arrive pas à l'interpréter.
Est ce que le cas où un authorid n'est pas présent dans une des tables sera traité par ta requête?

Oncle Tom
WRInaute impliqué
WRInaute impliqué
 
Messages: 812
Inscription: 31 Mar 2003

Message le Mer Juil 21, 2004 15:26

Normalement oui mais uniquement pour la 1° table.
Sinon faudra faire 2 requêtes pour tout tout avoir.

Tu voulais quoi exactement ?


sietjp
WRInaute impliqué
WRInaute impliqué
 
Messages: 624
Inscription: 14 Déc 2003

Message le Mer Juil 21, 2004 15:46

Pour formuler autrement, le résultat souhaité c'est le nombre de fois qu'apparait un authorid donné que ce soit dans table1 ou table2.

Je crois que c mission impossible en 1 seule requête non?


lorantino
WRInaute discret
WRInaute discret
 
Messages: 154
Inscription: 4 Juin 2004

Message le Mer Juil 21, 2004 16:45

soit plus clair, qu est ce que tu veux afficher au final ???

et donne nous aussi la structure de tes tables avec 2 ou 3 exemples d enregistrements pour qu on s amuse comme des fous ;)

++

Oncle Tom
WRInaute impliqué
WRInaute impliqué
 
Messages: 812
Inscription: 31 Mar 2003

Message le Jeu Juil 22, 2004 8:05

Ben en 1 requête ça tient du bricolage car les 2 tables sont indépendantes (en tous cas d'après leur structure).
Et pareil que lorantino, je veux tout savoaareuh :p


sietjp
WRInaute impliqué
WRInaute impliqué
 
Messages: 624
Inscription: 14 Déc 2003

Message le Jeu Juil 22, 2004 9:59

par exemple

table1 :
id | authorid
1 | 10
2 | 5
3 | 10
4 | 6
5 | 2
6 | 5


table2 :
id | authorid
1 | 11
2 | 1
3 | 10
4 | 6
5 | 5
6 | 1

je veux obtenir
authorid | nb apprition authorid dans table1 et table2
10 | 3
5 | 3
6 | 2
1 | 2
11 | 1

Oncle Tom
WRInaute impliqué
WRInaute impliqué
 
Messages: 812
Inscription: 31 Mar 2003

Message le Jeu Juil 22, 2004 10:55

Question *on : pourquoi avoir 2 tables qui ont la même structure ?


sietjp
WRInaute impliqué
WRInaute impliqué
 
Messages: 624
Inscription: 14 Déc 2003

Message le Jeu Juil 22, 2004 11:19

En fait j'ai s'imlpifié le problème, les tables ont plus de champs que ça, avec des champs différents. Ceux des tables qui contiennent certaines actions des membres du site. Je voulais avoir le nombre d'action total d'un membre pour estimer son activité sur le site.

Oncle Tom
WRInaute impliqué
WRInaute impliqué
 
Messages: 812
Inscription: 31 Mar 2003

Message le Jeu Juil 22, 2004 12:20

Ah ouais okay ...
donc tu as 1 table membre et 1 table d'action ou ... ? Parce que là ça peut être possible mais faut pas être si radin en infos ^^


lorantino
WRInaute discret
WRInaute discret
 
Messages: 154
Inscription: 4 Juin 2004

Message le Jeu Juil 22, 2004 14:00

j sais pas si c est possible de faire tout ca juste avec du sql ... moi a ta place je ferais un petit fichier php, ca sera bien plus simple.

tu commence par faire un select distinct sur tes authorid des 2 tables, tu met dans un tableau avec php et tu fais un for pour compter le nombre de fois qu il apparaisse ... ensuite tu classe le tableau final ...

bon enfin tout ca reste a tester mais comment dire, j ai pas trop envie de le faire la ;)

++

[MYSQL] compter champs de tables différentes

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Formation recommandée sur ce thème :

Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par les experts Google Analytics de Ranking Metrics.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité