[PHP] tableau ( $num[$i] )

) [PHP] tableau ( $num[$i] - PHP - Programmation

Marsh Posté le 07-02-2006 à 17:53:34    

Bonsoir à tous,
 
Je suis actuellement en train de réaliser un site internet de football dynamique en PHP. Pour le moment tout ce qui suis est fonctionnel et gérable depuis un panel admin: saison, calendrier, championnat, équipe, joueurs, rencontre, classement buteurs, rencontre en live (affichage composition, buteurs, score etc.).
 
Il me reste donc à faire le classement des équipes, donc des championnats, que tout soit automatique.  
 
En bref voilà comment ca marche, j'ai une table t_rencontre ou figure toutes les rencontres de la saison (eq1, eq2, date, resultat_eq1, resultat_eq2)
 
Par defaut les resultats sont null, dès lors que j'ajoute le résultat, une ligne est créée dans une autre table t_points indiquant l' id de l'équipe et ses points, donc par de simple if() detect si il s'agit d'une victoire: 3p, d'un nul: 1p ou d'une defaite: 0p.
 
Avec cette table t_points, il m'est ensuite possible de compter les points avec la fonction sql: SUM(poi_points) AS TOTAL par exemple. Cette requête je la tri en ORDER BY TOTAL DESC. Pour que mon classement soit dans l'ordre.
 
Jusque là tout est ok!
 
Mais comme par la suite il faudra que figure le nombre de match joué, de victoire, de nul, de défaite etc.  
 
J'insère ma requete dans un tableau php:
 

Code :
  1. $i=0;
  2. do {
  3. $num[$i]['nb']=$row_Recordset_points_totaux['TOTAL'];
  4. $num[$i]['equipe']=$row_Recordset_points_totaux['equipes'];
  5. $i++;
  6. } while ($row_Recordset_points_totaux = mysql_fetch_assoc($Recordset_points_totaux));


 
Quand je l'affiche le classement est tjs bien ordré, avec les équipes et leur points dans l'ordre.
 

Code :
  1. for($f=0 ; $f < count($num) ; $f++){
  2. <table>
  3. <tr>
  4. <td>echo $num[$f]['equipe'];</td>
  5. <td> echo $num[$f]['nb'];</td>
  6. </tr>
  7. </table>


 
Par la suite j'ai créé une requête comptant le nombre de ligne par équipe, celà represente enfait le nombre de match qu'a effectué les équipes. Avec la fonction sql nomé Recordset_nb_match: COUNT(*) AS nbGAMES etc.
 
Jusqu'ici ca fonctionne encore, mais je bloque dès lors qu'il faut afficher le nombre de match jouer en face des equipes et leur nombre de point.
 
Donc j'utilise une technique, qui me met les bons nombres de match enface des équipes et leur points, mais celà me change l'ordre du tableau, il prend enfait l'ordre de la requete du comptage des match.
 
Voici comment je m'y suis pris:
 

Code :
  1. do {
  2.  for($f=0 ; $f < count($num) ; $f++){
  3.  if($row_Recordset_nb_match['equ_id']==$num[$f]['id']){
  4.   ?>
  5.   <tr>
  6.   <td><?php echo $num[$f]['nom']; ?></td>
  7.   <td><?php echo $num[$f]['nb']-4; ?></td>
  8.   <td><?php echo $row_Recordset_nb_match['nbGAMES']-3; ?></td>
  9.   </tr>
  10.   <?php
  11.  }
  12. }
  13. } while ($row_Recordset_nb_match = mysql_fetch_assoc($Recordset_nb_match)); ?>


 
Donc le do while pour afficher la requete, et un if() pour mettre le nombre de match enface de la bonne équipe.
 
Cette manière de faire me désordonne mon tableau, et donc ce n'est pas un classement, puisque il retri en fonction de la requete Recordset_nb_match, et ne tiens plus compte de mon ORDER BY TOTAL DESC.
 
Voilà, très complexe, j'ai fais de mon mieux pour que ca soit compréhensif, si qqch vous échappe je me ferai un plaisir de vous éclaicir encore une fois sur mon problème.
 
Bonne soirée à tous et vive le php  :pt1cable:

Reply

Marsh Posté le 07-02-2006 à 17:53:34   

Reply

Marsh Posté le 07-02-2006 à 18:04:15    

Tient j'ai un collegue qui fait le meme site, mais pour du rugby :D


---------------
CPU-Z | Timespy | Mes bd
Reply

Marsh Posté le 07-02-2006 à 18:29:23    

Pas le temps de lire toutes les explications et d'analyser comment t'as fait ton code mais si tu veux pas que le tris soit changé par l'ordre des données de la seconde requette alors il faut :
1) que tu boucles sur les données de ta premiére requette et qu'ensuite tu affiches les données correspondantes qui sont dans la seconde
2) ou que tu demandes à ce que le tris principal de la seconde requette soit le même que celui de la premiére quitte à mettre le tri actuel en tri secondaire .

Reply

Marsh Posté le 07-02-2006 à 18:49:09    

omega2 a écrit :

Pas le temps de lire toutes les explications et d'analyser comment t'as fait ton code mais si tu veux pas que le tris soit changé par l'ordre des données de la seconde requette alors il faut :
1) que tu boucles sur les données de ta premiére requette et qu'ensuite tu affiches les données correspondantes qui sont dans la seconde
2) ou que tu demandes à ce que le tris principal de la seconde requette soit le même que celui de la premiére quitte à mettre le tri actuel en tri secondaire .


 
La 2ème solution j'ai déjà essayé et c'est vrai que ca marche, mais par la suite lors des match gagné, une requete qui compte les ligne ou points = 3, ben la je ne pourrais pas faire le meme tri.
 
Par contre ta solution n°1 m'interesse, mais je n'ai pas tout à fait compri le système comme tu l'indique...
 
Voici le code d'affichage avec le boucle:
 

Code :
  1. <?php
  2. do {
  3.  for($f=0 ; $f < count($num) ; $f++){
  4.  if($row_Recordset_points['equ_id']==$num[$f]['id']){
  5.   ?>
  6.   <tr>
  7.   <td><?php echo $num[$f]['equipe']; ?></td>
  8.   <td><?php echo $num[$f]['nb']; ?></td>
  9.   <td><?php echo $row_Recordset_points['nbGAMES']; ?></td>
  10.   </tr>
  11.   <?php
  12.  }
  13. }
  14. } while ($row_Recordset_points = mysql_fetch_assoc($Recordset_points)); ?>


 
Faudrait enfait que je change les boucles la dedant si j'ai bien compri?

Reply

Marsh Posté le 09-02-2006 à 20:17:34    

Bonsoir,
 
Personne ne peut m'apporter une solution pour éviter que le tris soit changé par l'ordre des données de la seconde requête?
 
Bonne soirée.

Reply

Marsh Posté le 12-02-2006 à 10:27:21    

TheBosy a écrit :


Par la suite j'ai créé une requête comptant le nombre de ligne par équipe, celà represente enfait le nombre de match qu'a effectué les équipes. Avec la fonction sql nomé Recordset_nb_match: COUNT(*) AS nbGAMES etc.


 
Il n'y a pas de raison que ce ne soit pas possible directement. COUNT + GROUP BY.
 
Fait voir la requête que tu fais jusqu'ici.

Reply

Marsh Posté le 12-02-2006 à 17:52:00    

sielfried a écrit :

Il n'y a pas de raison que ce ne soit pas possible directement. COUNT + GROUP BY.
 
Fait voir la requête que tu fais jusqu'ici.


 

Code :
  1. "SELECT *, t_points.poi_equipe,COUNT(*) AS nbGAMES,SUM(poi_points) AS TOTAL FROM t_points, t_equipe WHERE t_points.poi_equipe = t_equipe.equ_id AND t_equipe.num_cha=1 GROUP BY t_points.poi_equipe ORDER BY TOTAL DESC"


 
Oui oui dans cette requete je peux la trier par points totaux comme je l'ai fait là, mais par la suite il faut savoir qu'il faudrait que je fasse des requetes ne comptant que les victoires et en les groupant par équipe, et donc dans ce cas il m'est impossible de faire encore une fois un ORDER BY par points totaux.
 
Mais j'ai demandé à un prof d'info, et il m'a dit qu'avec un LEFT JOIN celà pour être plus simple. Il m'a ensuite conseillé de tout transferer dans Acces pour faire les calcules car celà serait plus simple.


Message édité par TheBosy le 12-02-2006 à 17:52:40
Reply

Sujets relatifs:

Leave a Replay

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