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

  FORUM HardWare.fr
  Programmation
  PHP

  Alléger ses requêtes mysql

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Alléger ses requêtes mysql

n°284186
Evolvox
Toujours y croire, toujours...
Posté le 11-01-2003 à 16:59:07  profilanswer
 

C'est encore moi  :D  
 
J'ai une question qui porte sur mysql cette fois. Je dois faire une sorte de statistiques, et j'utilise des requêtes multiples. Enfin, plutôt, des réquêtes à l'intérieur d'une requête... Et je trouve ça hypra-lourd dans le genre. L'exemple simplifié du code ci-dessous :
 

Code :
  1. $query = "SELECT * FROM users";
  2. $result = mysql_query($query, $connection);
  3. while($row = mysql_fetch_row($result))
  4. {
  5.         $pseudo = $row[1];
  6.         .
  7.         .
  8.         .
  9.         $query2 = "SELECT * FROM posts WHERE pseudo='$pseudo'";
  10.         $result2 = mysql_query($query2, $connection);
  11.         $nbposts = mysql_num_rows($result2);
  12.  
  13.         $query3 = "SELECT * FROM subjects WHERE pseudo='$pseudo'";
  14.         $result3 = mysql_query($query3, $connection);
  15.         $nbsubjects = mysql_num_rows($result3);
  16.  
  17.         print("$pseudo, $nbposts, $nbsubjects" );
  18.         }


 
Comme je suis plutôt très moyen en Mysql, je me demandais s'il y avait une méthode pour regrouper toutes ses requêtes en une seule ?  :??:


---------------
gaymer's est la personne la plus formidable jamais rencontrée dans toute ma vie, je lui achèterais un makato et au moins les 4 news pourries quotidiennes qui vont avec
mood
Publicité
Posté le 11-01-2003 à 16:59:07  profilanswer
 

n°284195
sielfried
Posté le 11-01-2003 à 17:13:40  profilanswer
 

C'est sûrement faisable en réfléchissant bien avec du GROUP BY, le tout après une jointure de tes tables, mais ce que je te conseille de faire si tu souhaites alléger tes requêtes et que tu n'es pas trop limité par la place, c'est de stocker quelques données calculées.
 
En reprenant ton exemple, dans ta table users tu rajoutes les nbposts et nbsubjects, que tu n'oublies pas de mettre à jour quand il le faut.
 
Ainsi tu as une ou deux requêtes de mise à jour plus lors de l'ajout d'un topic ou post, mais à l'affichage ça devient beaucoup plus léger, avec une seule requête dans tous les cas.
 
C'est ce que je fais, en tout cas.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°284205
Evolvox
Toujours y croire, toujours...
Posté le 11-01-2003 à 17:29:33  profilanswer
 

:jap:  
 
Je n'avais pas pensé à cette solution !
 
Mais est-ce que quelqu'un pourrait tout de même me donner un exemple avec des GROUP BY, et des jointures de tables, car ce sont justement ce genre de notions mysql qui m'échapppent...


---------------
gaymer's est la personne la plus formidable jamais rencontrée dans toute ma vie, je lui achèterais un makato et au moins les 4 news pourries quotidiennes qui vont avec
n°284206
Profil sup​primé
Posté le 11-01-2003 à 17:31:47  answer
 

user.id = prend l'id de la table user :)
 
le group by j'aui du mal aussi :whistle:

n°284210
sielfried
Posté le 11-01-2003 à 17:43:31  profilanswer
 

Voilà la requête que ça donnerait dans ton cas, si uniquement le nombre de posts par utilisateur t'intéressait :
 

SELECT U.*, COUNT(P.id) FROM users U, posts P WHERE U.pseudo = P.pseudo GROUP BY U.pseudo


 
(en admettant que "pseudo" soit bien le nom du champ pseudo dans ta table users, et "id" le champ clé primaire de ta table posts).
 
Je crois qu'il y'a une version plus "MySQL" de faire les jointures, mais il me semble que cela revient au même au final.
 
Par contre pour avoir également le nombre de sujets, je pense que ce serait bien plus compliqué, voire très difficilement faisable en une requête unique.


Message édité par sielfried le 11-01-2003 à 17:43:56

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°284223
Evolvox
Toujours y croire, toujours...
Posté le 11-01-2003 à 18:05:45  profilanswer
 

Oki merci beaucoup  :)  
 
Je pense que je vais retenir la première méthode que tu m'as cité, je crois que c'est ce qu'il y a de mieux à faire tout comptes faits.


---------------
gaymer's est la personne la plus formidable jamais rencontrée dans toute ma vie, je lui achèterais un makato et au moins les 4 news pourries quotidiennes qui vont avec

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Alléger ses requêtes mysql

 

Sujets relatifs
MySQL password() décrypter ??Wanadoo et MySQL
Accéder à MySql avec D7 Peronnal Edition[MySQL] Fusionner 2 requêtes en une (MySQL 3.23 only ...)
logiciel pour "tronçonner" une db mysql ?/n, \n <br> ? Recuperer les sauts de lignes avec MySQL/PHP textarea?
MySQL ramener les X premiers car. d'un record?Next ID utilisé par Mysql
MySQL Pourquoi ma requete elle fonctionne pas? 
Plus de sujets relatifs à : Alléger ses requêtes mysql


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