Se connecter / S'enregistrer
Votre question

[resolu]Fusionner 3 résultat et les ordonner (3 tables)

Tags :
  • Select
  • MySQL
  • Programmation
Dernière réponse : dans Programmation
4 Janvier 2013 11:17:55

Bonjour à tous et à toutes,

Voici quelques temps que bute sur un soucis.
Je cherche à faire un classement dans un tableau depuis trois table.

-> TABLE 1 : pseudo, points.
-> TABLE 2 : pseudo, points.
-> TABLE 3 : pseudo, points.

J'aimerais donc ordonner mon classement (position dans le tableau) en fonction de leur nombre de points.

Petite difficulté suivant les tables, je compte les points de différentes manières.

Voici donc mon code actuel pour plus de compréhension (ou pas) :

  1. // MA CONNEXION BDD
  2. $i = 1;
  3. $sql1= "SELECT * FROM table1";
  4. $requete1=mysql_query("SELECT pseudo, COUNT(*) AS nb_points FROM table1 WHERE date2 BETWEEN '$timestamp1' AND '$timestamp2' GROUP BY pseudo ORDER BY nb_points ORDER BY nb_points DESC LIMIT 0,20");
  5. while ($donnees1 = mysql_fetch_array($requete1)){
  6.  
  7. $ppo = mysql_query("SELECT le_pseudo FROM table.membre WHERE le_pseudo= '".$donnees1['pseudo']."'");
  8. $mpo = mysql_fetch_array($ppo);
  9.  
  10. // ON COMPTE LES POINTS DES AUTRES TABLES
  11. $sql2= "SELECT * FROM table2";
  12. $requete2=mysql_query("SELECT pseudo, COUNT(*) AS nb_points2 FROM table2 WHERE pseudo = '".$mpo['le_pseudo']."' AND date2 BETWEEN '$timestamp1' AND '$timestamp2' GROUP BY pseudo ORDER BY nb_points2 DESC LIMIT 0,20");
  13. $donnees2 = mysql_fetch_array($requete2);
  14.  
  15. $sql3= "SELECT * FROM table3";
  16. $requete3=mysql_query("SELECT pseudo, COUNT(*) AS nb_points3 FROM table3 WHERE pseudo = '".$mpo['le_pseudo']."' AND date2 BETWEEN '$timestamp1' AND '$timestamp2' GROUP BY pseudo ORDER BY nb_points3 DESC LIMIT 0,20");
  17. $donnees3 = mysql_fetch_array($requete3);
  18.  
  19. // J'AFFICHE MES RESULTAT DANS LE TABLEAU
  20. // JE VOUS PASSE LES DETAILS DU TABLEAU
  21.  
  22. $nb_points_total = (($donnees1['nb_points']/2)+($donnees3['nb_points3']*1.5)+($donnees2['nb_points2']));
  23.  
  24. // DONC $i pour ma position, $mpo['le_pseudo'] pour le joueur, et $nb_points_total.
  25.  
  26. $i++;
  27. }


Bon après tout ça j'explique mon problème !

La totalité des points est bien compté, mais le classement de position pseudo/points n'est pas en rapport avec la position.

Il est en rapport avec ma toute première requête (les points dans TABLE1), celle du while donc. A prioris normal.

Mais du coup, comment ordonner ce tableau alors en fonction du total ?

Je vous remercie par avance ne serait-ce que du passage sur ce topic et de votre éventuelle lecture.

Bien amicalement, Yann.



Autres pages sur : resolu fusionner resultat ordonner tables

a b L Programmation
5 Janvier 2013 04:12:19

Bonjour ...

humm , je ne comprend pas trop ce que tu veux faire ...
enfin un peut quand même ...

Donc dans un premier temps je te conseille de passer a la PDO et d'utiliser les requête préparer ( de gros gain de performance et de lisibilité en perspective )

Ensuite un peut de POO ou de pseudo POO pour découper ton code en deux/trois partie ....
1. tu fais t'es requête et tu stoquer t'es info dans un array d'array ( Hien , mais un sac dans un sac ... ne fais pas que le sac est plus grand :??:  , Une sombres histoire de stack mais je m’éloigne du sujet !)
2. tu tris ton tableau .
3. tu affiche ton tableau !

5 Janvier 2013 06:30:56

Bonjour andrelec1,

et merci pour ta réponse.

Je vais m'expliquer plus clairement. J'ai parler de points dans ma demande d'explications/aide pensant être plus clair.
Mais je vais être plus précis cela pourrait être mieux.

En fait, sur mon site, j'ai mis en place un concours. Celui ce basant (la position $i) sur le nombre de participation ou codes que joueur a pu valider.
Il existe trois façon/formule de les valider. Ces trois là sont plus ou moins différentes (multiplication par 0.5, 1 ou 1.5). Donc pour m'y retrouver plus facilement j'ai enregistré ça sur trois tables (1, 2 ,3).

J'ai essayé avec un array déjà mais a l'intérieur de la boucle et pour classé le nombre total de points/participations.
Tout en gardant ma première requete en haut.

Me serais-je trompé ? Devrais-je viré ma requete du haut (mais dans ce cas, comment je ressort mon pseudo par la suite).

PDO, j'ai vraiment du mal, ce pourquoi j'en reste au PHP.

Encore merci de ta réponse et ton aide andrelec1.

Bien Amicalement, Yann.
Contenus similaires
5 Janvier 2013 19:03:07

Bonsoir,

Sans passer par la PDO mais en restant sur PHP j'ai fait donc 3 array pour mes trois tables.
Que j'ai ensuite affichés dans mon tableau !

Merci à vous !

Amicalement, Yann.
a b L Programmation
7 Janvier 2013 05:25:26

En fais PDO est du PHP !
La PDO n'est qu'un interface pour utiliser des bases de données sans avoir à s'occuper du SGBD. ( http://fr.wikipedia.org/wiki/SGBD )
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS