[MYSQL] compter champs de tables différentes
17 messages
• Page 1 sur 2 • 1, 2
Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics
-

sietjp - WRInaute impliqué

- Messages: 624
- Inscription: 14 Déc 2003
[MYSQL] compter champs de tables différentes
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...
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é

- Messages: 812
- Inscription: 31 Mar 2003
- 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 ?
-

sietjp - WRInaute impliqué

- Messages: 624
- Inscription: 14 Déc 2003
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é

- Messages: 812
- Inscription: 31 Mar 2003
je suis un peu bête là ^^ fais au lieu de grouper sur c1 et c2, groupe sur a1 et a2.
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).
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é.
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.
- 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é

- Messages: 624
- Inscription: 14 Déc 2003
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
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
-

sietjp - WRInaute impliqué

- Messages: 624
- Inscription: 14 Déc 2003
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.
-

lorantino - WRInaute discret

- Messages: 154
- Inscription: 4 Juin 2004
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
++
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
++
17 messages
• Page 1 sur 2 • 1, 2
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 :
- Compter les connexions à mysql
- Tables MySQL corrompues
- Tables MySQL liées
- Mysql sum sur 2 tables
- [MySQL] : select de 2 tables et mysql_fetch_assoc
- Fusionner deux tables mysql
- [PHP] : compter le nombre de requêtes MySQL
- Taille des tables MySQL
- [Résolu] MySQL lier 2 tables
- Update de 2 tables MySql [RESOLU]
- Gestion des langues et des sessions en PHP / MySQL - 02-05-2004
- Google compter lever entre 2 et 3 milliards de dollars - 26-07-2004
- AdSense Tracking : statistiques détaillées sur les clics AdSense - 29-02-2004
- Passage à l'heure d'été/hiver sur un forum phpBB - 31-10-2010
- Script de mise en cache des pages (PHP MySQL) - 09-08-2010
- Les différents systèmes de mise en cache des données - 16-08-2010
- GoogleStats : analyse temps réel des visites de Google sur votre site - 02-10-2002
- Sortie officielle de GoogleStats v2.0 ! - 23-02-2003
Consultez la description détaillée des produits ou services de Google suivants : Google Website Optimizer
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

