PHP/MySQL [noob] Classement détaillé

PHP/MySQL [noob] Classement détaillé - PHP - Programmation

Marsh Posté le 25-05-2004 à 20:17:40    

Salut les gens  :o  
 
Voilà j'aimerais faire un classement détaillé du même acabit que celui là mais en moins fournit niveau colonnnes:
[:icon2]http://lequipe.fr/Football/Footbal [...] 400_G.html
 
Le tout en PHP+MySQL.
 
Pour faire un classement simple j'ai utiliser cette méthode:

Code :
  1. $requete = "SELECT noms, points FROM classement_tbl ORDER BY points DESC noms";
  2. $result = mysql_query($requete);


puis  

Code :
  1. $i=0;
  2. while ($ligne=mysql_fetch_array($result))
  3. {
  4. $i++;
  5. print("$i$ligne['noms'] $ligne['points']<br>" );
  6. }


 
Cependant j'ai deux problèmes:
 

  • Dans le cas d'une égalité parfaite:

4 Brest 22
5 Rennes 22
6 Lorient 21


Brest et Rennes ont le même nombre de points, mais je voudrais que le numero de place soit remplacé par un "-" plutôt que "5", soit:

4 Brest 22
- Rennes 22
6 Lorient 21


Bon j'avoue j'ai déjà trouvé un moyen de le faire mais j'aimerais voir d'autres méthodes éventuellement.
 
 

  • En fait le gros problème le voici:

J'ai ce genre de classement:

1 Quimper 30
2 Pontivy 29
3 Lannion 25
4 Brest 22
- Rennes 22
6 Lorient 21


Mais je voudrais signifier que Quimper est champion et que Pontivy et Lannion sont qualifiés pour une compétition européenne du fait de leur place dans les 3 premiers, soit:

1 Quimper 30
------------------ (champion)
2 Pontivy 26
3 Lannion 25
------------------ (qualification européenne)
4 Brest 22
5 Rennes 22
6 Lorient 21


Pour corser le problème, et prévoir les cas de figure qui peuvent se présenter, imaginons que Lannion et Brest soient à égalité de points, mais comme le championnat n'est pas fini on ne sait pas qui sera qualifié donc on englobe 3 équipes dans la partie "qualification européenne" (Pontivy, Lannion et Brest) soit:

1 Quimper 30
------------------ (champion)
2 Pontivy 26
3 Lannion 25
- Brest 25
------------------ (qualification européenne)
5 Rennes 22
6 Lorient 21


 
J'espère avoir été compris.
La question est simple, comment feriez-vous? (PHP+MySQL)
Ca à l'air tout simple mais je bute.  [:alarmclock133]  
 
Merci bcp.


Message édité par Vague Nocturne le 25-05-2004 à 20:46:10
Reply

Marsh Posté le 25-05-2004 à 20:17:40   

Reply

Marsh Posté le 25-05-2004 à 20:35:29    

Dans ta boucle POUR il me semble qu'il y a un soucis je serais toi je ferais une TANT QUE :  
$i=0;
while ($ligne=mysql_fetch_array($result))
  {  
    $i++;
    if($ancienpoints == $ligne['points'])
        {
 
        print("-".$ligne['noms'] $ligne['points']<br/>" );  
        }
    else
        {
        print($i.$ligne['noms'] $ligne['points']<br/>" );  
        }
    $ancienpoints = $ligne['points'];
  }
 
 
non ?

Reply

Marsh Posté le 25-05-2004 à 20:38:55    

Oui c'est exactement ce que j'ai fait :) avec un "while".
 
Merci, ça me réconforte, je suis tout nouveau ds le domaine de la programmation tu sais :o
 
Sinon me reste le gros problème.

Reply

Marsh Posté le 25-05-2004 à 20:47:06    

Bon j'ai changé la boucle FOR en WHILE ds le premier post.

Reply

Marsh Posté le 25-05-2004 à 20:50:56    

Le gros problème n'est pas vraiment un, si tu veux être complet, tu dois respecter les règles en vigueur dans le pays (si égalité de points, on regarde le nombre de victoire, puis les résultats croisés et enfin le goal average par exemple). Et je t'épargnes l'affichage des qualifiés pour une coupe d'europe par un autre moyen que le championnat :D

Reply

Marsh Posté le 25-05-2004 à 20:54:54    

Ouais je voudrais bien faire de l'humour mais gardons un minimum de sérieux et concentrons nous sur le problème.  :o  
 
En fait les règles c'est moi qui les décident et y'a rien d'autres pour départager que les points.  [:alarmclock133]

Reply

Marsh Posté le 25-05-2004 à 21:06:29    

Je suis sérieux hein, tu les départages comment en fin de championnat ? :)
 
Sinon, la méthode simple c'est :
Je connais le nombre de points du premier et du troisième, avant chaque affichage je regarde si le nombre de point de l'équipe courante est inférieur. Si oui et que la barre n'a pas déjà été affichée, j'affiche ma barre puis l'équipe, sinon, j'affiche juste l'équipe.

Reply

Marsh Posté le 25-05-2004 à 21:09:11    

naceroth a écrit :

Je suis sérieux hein, tu les départages comment en fin de championnat ? :)
 
Sinon, la méthode simple c'est :
Je connais le nombre de points du premier et du troisième, avant chaque affichage je regarde si le nombre de point de l'équipe courante est inférieur. Si oui et que la barre n'a pas déjà été affichée, j'affiche ma barre puis l'équipe, sinon, j'affiche juste l'équipe.


Damn! J'y avait pas pensé.
 
Thx  :jap:


Message édité par Vague Nocturne le 25-05-2004 à 21:09:51
Reply

Marsh Posté le 25-05-2004 à 21:18:29    

Je me suis lancé tête la première dans une tentaive de résoudre mon problème mais comment accéder au 3ème élément (le troisième nombre de points par ordre décroissant) de $ligne['points']?
Il y a une méthode directe ou bien juste du bricolage?

Reply

Marsh Posté le 26-05-2004 à 00:37:36    

là, le bricolage est limite plus simple.
 
Comme tu devras parcourir toutes les équipes, il suffit d'utiliser le compteur $i de la solution de rainbow_efreet et de mémoriser la valeur de $ligne['points'] pour $i = 1 et 3.
 
Mais question à deux points, comment vas tu gérer l'affichage pour une situation genre :

1 Quimper 3
- Pontivy 3
- Lannion 3
- Brest 3
- Rennes 3
- Lorient 3


 
(Classique de début de championnat :D)

Reply

Marsh Posté le 26-05-2004 à 00:37:36   

Reply

Marsh Posté le 26-05-2004 à 08:53:01    

Je ne comprend pas ton probleme mon algorythme peut te fournir une reponse du type  
 
1 Quimper 3  
- Pontivy 3  
- Lannion 3  
- Brest 3  
- Rennes 3  
- Lorient 3  
 
quel est le probleme concretement ?

Reply

Marsh Posté le 26-05-2004 à 16:34:47    

Pas à toi que je parlais remarque :D
 
Non, mais la question c'est comment Vague Nocturne met il les barres si le premier a autant de points que le troisième (donc, si les champions potentiels et les européens potentiels sont les mêmes équipes :))

Reply

Marsh Posté le 26-05-2004 à 16:58:00    

Y'a pas moyen d'afficher les valeurs d'un tableau autrement que par un boucle?
Est-il possible de déplacer le pointeur jusqu'à une valeur souhaitée?

Reply

Marsh Posté le 26-05-2004 à 17:08:12    

Oui, c'est possible (mysql_data_seek), mais c'est se compliquer la vie pour rien dans le cas présent :)

Reply

Marsh Posté le 26-05-2004 à 17:13:00    

tu ferais comment toi (en igonrant ton cas de figure sur le début de championnat)?
 
Je me suis vraiment creusé les méninges, j'y ai surtout vu que j'avais plein de lacunes :o...


Message édité par Vague Nocturne le 26-05-2004 à 17:13:06
Reply

Marsh Posté le 26-05-2004 à 18:17:13    

Arf, j'ai pas pu recopier mon propre code :D
 
Bon, je ferais un truc genre (en partant du code de rainbow_efreet, sans les erreurs de parsing :D)

Code :
  1. while (...){
  2. $i++;
  3. if($ancienpoints == $ligne['points'])
  4. {
  5.   echo '-'.$ligne['noms'].' '.$ligne['points'].'<br />'; 
  6. }
  7. else
  8. {
  9.   if ($ligne['points'] < $pointReference and !$barrePlacee)
  10.   {
  11.   echo '-----<br />';
  12.   $barrePlacee = true;
  13.   }
  14.   echo $i.$ligne['noms'].' '.$ligne['points'].'<br />'; 
  15. }
  16. if ($i == 1 or $i == 3)
  17. {
  18. $pointReference = $ligne['points'];
  19. $barrePlacee = false;
  20. }
  21. $ancienpoints = $ligne['points'];
  22. }


 
//edition : rendons à César ce qui était à César, y avait une erreur de nick sur le code dont je me suis inspiré :D


Message édité par naceroth le 27-05-2004 à 07:16:05
Reply

Marsh Posté le 27-05-2004 à 03:15:37    

Merci bcp de ton aide, ainsi que Rainbow...  [:vague nocturne]  
J'ai vu où était ma difficulté (vérifier que la barre était déjà placée) et j'ai changé le script selon ma façon de voir.
 
Salutations.

Reply

Sujets relatifs:

Leave a Replay

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