Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1538 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [RESOLU] Recherche MySQL un peu complexe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] Recherche MySQL un peu complexe

n°1606968
arkandias1
Posté le 31-08-2007 à 19:00:43  profilanswer
 

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
mood
Publicité
Posté le 31-08-2007 à 19:00:43  profilanswer
 

n°1607039
gagou2201
Posté le 01-09-2007 à 01:04:00  profilanswer
 

: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
n°1607053
sielfried
Posté le 01-09-2007 à 09:34:41  profilanswer
 

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
n°1607113
arkandias1
Posté le 01-09-2007 à 18:11:29  profilanswer
 

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

n°1607116
gagou2201
Posté le 01-09-2007 à 18:21:48  profilanswer
 

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


---------------
Feedback A/V
n°1607121
arkandias1
Posté le 01-09-2007 à 18:29:08  profilanswer
 

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
n°1607124
gagou2201
Posté le 01-09-2007 à 18:39:08  profilanswer
 

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
n°1607128
arkandias1
Posté le 01-09-2007 à 18:46:03  profilanswer
 

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 ;)

n°1607129
gagou2201
Posté le 01-09-2007 à 18:53:23  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [RESOLU] Recherche MySQL un peu complexe

 

Sujets relatifs
[MAVEN] Question de package avec les sous modules [Resolu][Resolu]Problème de "map"
[MySQL] mysqldump : Option pour avoir un INSERT par enregistrementExpression régulière pour moteur de recherche...
[RESOLU]INSER INTO si données différentesextension web *.ep et zone saisie de recherche dans une newsletter
Afficher du code en couleur dans une page HTML[SqlServer2005][Résolu] Fichier corrompu dans la base tempdb ?
[resolu] pb access 2002 et VBA (formulaire)[résolu] separateur de chemin : existe t'il une constante?
Plus de sujets relatifs à : [RESOLU] Recherche MySQL un peu complexe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR