[RESOLU] Recherche MySQL un peu complexe

Recherche MySQL un peu complexe [RESOLU] - SQL/NoSQL - Programmation

Marsh Posté le 31-08-2007 à 19:00:43    

Bonjour !
 
Je suis sur phpBB, et j'essaie de créer une page sur laquelle il y a une liste des groupes existant sur mon forum (ca c'est fait), mais je voudrais pouvoir trier la liste par nombre de membres et j'ai du mal avec la requête MySQL (4.0 chez moi)
 
Concrètement voici la situation :
 
La table phpbb_groups contient le champs group_id, et c'est à partir de celle-ci que j'obtient ma liste.
La table phpbb_user_group contient les champs user_id et group_id, et pour chaque membre inscrit dans un groupe on a un enregistrement du type : 115 (id du membre), 2 (id du groupe).
 
Ca fonctionne comme ca phpBB ;)  
 
Quelle requête dois-je faire pour pouvoir récupérer les enregistrements de phpbb_groups (en clair ma liste de groupes) triés par le nombre de leurs membres (donc le nombre de fois qu'apparait l'id de chaque groupe dans phpbb_user_group).
 
Si vous avez tout suivi et que vous vous y connaissez en MySQL, merci d'avance ;)  
 
Bonne journée !


Message édité par arkandias1 le 01-09-2007 à 18:26:53
Reply

Marsh Posté le 31-08-2007 à 19:00:43   

Reply

Marsh Posté le 01-09-2007 à 01:04:00    

:hello:

 

Je n'ai pas testé cette requête mais je pense que le résultat convient à ce que tu recherches.

Code :
  1. SELECT * FROM phpbb_groups AS g LEFT JOIN (SELECT COUNT(*) AS count, group_id FROM phpbb_user_group GROUP BY group_id) AS u\
  2. ON g.group_id = u.group_id ORDER BY u.count;


En fait, je construis une requête donnant le nombre d'utilisateurs par groupe à partir de la table user_group; puis je fusionne ce résultat avec la table groups afin d'obtenir les infos complètes de cette table et je trie par le nombre de personnes par groupe.

 

Si ça ne marche pas, je la testerai pour trouver le soucis.


Message édité par gagou2201 le 01-09-2007 à 01:04:26

---------------
Feedback A/V
Reply

Marsh Posté le 01-09-2007 à 09:34:41    

J'aurais fait un truc comme ça moi :
 

Code :
  1. SELECT g.group_id, COUNT(ug.user_id) user_count
  2. FROM phpbb_groups g
  3. LEFT JOIN phpbb_user_group ug ON ug.group_id = g.group_id
  4. GROUP BY g.group_id
  5. ORDER BY user_count DESC


Mauvaise section, soit dit en passant...


Message édité par sielfried le 01-09-2007 à 09:35:29

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 01-09-2007 à 18:11:29    

Merci sielfried c'est impeccable ;)
 
Dans quelle section voulais-tu que je poste ?

Reply

Marsh Posté le 01-09-2007 à 18:21:48    

Il voulait que ce soit surement dans la sous-section SQL/SGBD.
 
Par curiosité, tu as testé mon idée?


---------------
Feedback A/V
Reply

Marsh Posté le 01-09-2007 à 18:29:08    

Ah désolé c'est déplacé j'ai cherché pendant un moment, trouvé ca un peu bizarre, mais j'avais pas vu le SQL bien caché :??:  
 
Pour ta requête oui j'ai testé :
 
Erreur
 
requête SQL:
 
SELECT *
FROM phpbb_groups AS g
LEFT JOIN (
 
SELECT COUNT( * ) AS count, group_id
FROM phpbb_user_group
GROUP BY group_id
) AS u \ ON g.group_id = u.group_id
ORDER BY u.count;
 
MySQL a répondu:Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\
      ON g.group_id = u.group_id ORDER BY u.count' at line 1


Message édité par arkandias1 le 01-09-2007 à 18:29:25
Reply

Marsh Posté le 01-09-2007 à 18:39:08    

le \ permet de marquer le retour en ligne sans le prendre en compte dans la requête, en clair il ne faut pas le recopier ;)


Message édité par gagou2201 le 01-09-2007 à 18:39:21

---------------
Feedback A/V
Reply

Marsh Posté le 01-09-2007 à 18:46:03    

Ah je me disais c'est pas très MySQL tout ca  :sol:  
 
Mais sinon
 
Ca me sort effectivement la liste de tous les groupes, mais c'est bizarre car count=1 tout le temps donc je ne peux pas avoir les membres de chaque groupe... sinon je crois que c'est bien trié.
 
Mais la requête de sielfried est plus simple quand même ;)

Reply

Marsh Posté le 01-09-2007 à 18:53:23    

Ok c'était juste pour savoir.
Et tout à fait d'accord avec la requête de sielfried qui est largement plus lisible et clair que la mienne.


---------------
Feedback A/V
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed