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

  FORUM HardWare.fr
  Programmation
  PHP

  PHP/MySQL [noob] Classement détaillé

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PHP/MySQL [noob] Classement détaillé

n°738488
Vague Noct​urne
Tout ça c'est politique.
Posté le 25-05-2004 à 20:17:40  profilanswer
 

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
mood
Publicité
Posté le 25-05-2004 à 20:17:40  profilanswer
 

n°738506
Rainbow_Ef​reet
Posté le 25-05-2004 à 20:35:29  profilanswer
 

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 ?

n°738508
Vague Noct​urne
Tout ça c'est politique.
Posté le 25-05-2004 à 20:38:55  profilanswer
 

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.

n°738514
Vague Noct​urne
Tout ça c'est politique.
Posté le 25-05-2004 à 20:47:06  profilanswer
 

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

n°738516
naceroth
Posté le 25-05-2004 à 20:50:56  profilanswer
 

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

n°738517
Vague Noct​urne
Tout ça c'est politique.
Posté le 25-05-2004 à 20:54:54  profilanswer
 

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]

n°738526
naceroth
Posté le 25-05-2004 à 21:06:29  profilanswer
 

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.

n°738527
Vague Noct​urne
Tout ça c'est politique.
Posté le 25-05-2004 à 21:09:11  profilanswer
 

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
n°738534
Vague Noct​urne
Tout ça c'est politique.
Posté le 25-05-2004 à 21:18:29  profilanswer
 

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?

n°738835
naceroth
Posté le 26-05-2004 à 00:37:36  profilanswer
 

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)

mood
Publicité
Posté le 26-05-2004 à 00:37:36  profilanswer
 

n°738964
Rainbow_Ef​reet
Posté le 26-05-2004 à 08:53:01  profilanswer
 

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 ?

n°740332
naceroth
Posté le 26-05-2004 à 16:34:47  profilanswer
 

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

n°740376
Vague Noct​urne
Tout ça c'est politique.
Posté le 26-05-2004 à 16:58:00  profilanswer
 

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?

n°740396
naceroth
Posté le 26-05-2004 à 17:08:12  profilanswer
 

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

n°740407
Vague Noct​urne
Tout ça c'est politique.
Posté le 26-05-2004 à 17:13:00  profilanswer
 

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
n°740495
naceroth
Posté le 26-05-2004 à 18:17:13  profilanswer
 

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
n°740958
Vague Noct​urne
Tout ça c'est politique.
Posté le 27-05-2004 à 03:15:37  profilanswer
 

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.


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

  PHP/MySQL [noob] Classement détaillé

 

Sujets relatifs
[PHP] Galerie d'image avec up | BUG[PHP] Une petite précision sur date()
Problême espace membres en PHP[PHP - resolu] Input type file et Easyphp1.7
[Débutant] Socket en C + interaction avec du PHP[Php/Mysql/Tableaux] Optimisation d'un code
Doc PHP problème [Résolu]mysql ne veut plus démarrer
Moteur de recherche en PHP surun DOC XML 
Plus de sujets relatifs à : PHP/MySQL [noob] Classement détaillé


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