Trie décroissant et ajouter un numéro

Résolu
cs_cy4nur3 Messages postés 17 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 27 mai 2010 - 18 mai 2010 à 14:46
cs_cy4nur3 Messages postés 17 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 27 mai 2010 - 19 mai 2010 à 09:28
Bonjour à toutes et a tous,

Je me permets de vous ecrire parce que je rencontre une diffculté dans la programmation de ma page Web en php.

Dans un premier temps voici mes tables:

CREATE TABLE IF NOT EXISTS `joueurs` (
  `joueurs_id` int(10) NOT NULL AUTO_INCREMENT,
  `joueurs_lic` int(10) DEFAULT NULL,
  `joueurs_nom` varchar(50) DEFAULT NULL,
  `joueurs_prenom` varchar(50) DEFAULT NULL,
  `joueurs_adresse` varchar(1000) DEFAULT NULL,
  `joueurs_classement` int(50) DEFAULT NULL,
  PRIMARY KEY (`joueurs_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;


CREATE TABLE IF NOT EXISTS `inscription` (
  `inscription_id` int(10) NOT NULL AUTO_INCREMENT,
  `num_appariement` int(10) DEFAULT NULL,
  `tournois_id` int(10) DEFAULT NULL,
  `joueurs_id` int(10) DEFAULT NULL,
  PRIMARY KEY (`inscription_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;


CREATE TABLE IF NOT EXISTS `tournois` (
  `tournois_id` int(10) NOT NULL AUTO_INCREMENT,
  `tournois_nom` varchar(50) DEFAULT NULL,
  `tournois_date_deb` datetime DEFAULT NULL,
  `tournois_date_fin` datetime DEFAULT NULL,
  `tournois_ronde` int(10) DEFAULT NULL,
  `tournois_lieu` varchar(50) DEFAULT NULL,
  `tournois_cloture` int(1) DEFAULT NULL,
  PRIMARY KEY (`tournois_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;


Je dois créer une page qui génére un numéro d'appariement.
Je m'explique, une personne s'inscrit à un tournois.
Une fois que le tounois est clos, je dois générer un numero d'appariement en fonction des personnes inscrites selon leur classement.
Le classement doit fait par ordre decroissant
La personne qui a le classement le plus elevé obtient 1.

Si j'ai:

Toto qui a un classement de 1500
Zozo qui a un classement de 1000
AAAA qui a un classement de 2850
BBBB qui a un classement de 300

Resultat que je cherche a obtenir:

AAAA qui a un classement de 2850 obtient le n° 1
Toto qui a un classement de 1500 obtient le n° 2
Zozo qui a un classement de 1000 obtient le n° 3
BBBB qui a un classement de 300 obtient le n° 4

Concretement j'aimerai que ce chiffre 1 pour le joueur AAAA vienne se mettre dans la table inscription ainsi que pour tous les autres joueurs.

Merci de votre aide.

PS: j'ai la derniere version de MYSQL ainsi que PHP.

12 réponses

Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
19 mai 2010 à 02:08
Il faut que tu fasses un update plus ciblé si ta condition est trop générique et s'applique à plusieurs lignes, toutes ces lignes vont être modifiées.

Si tu veux être précis, il faudrait que tu rajoutes la clé primaire dans ta condition de ton update. En fait, seule la clé primaire est nécessaire pour être précis et modifier seulement la ligne que tu veux modifier.

<?php
$numero = 1; 
$resultat mysql_query("SELECT * FROM `inscription` where `tournois_id`1 order by joueurs_classement DESC"); 

while ($row = mysql_fetch_assoc($resultat)) 
{ 
    $numero++; 
    $resultat2 mysql_query("UPDATE `inscription` SET `num_appariement` '".$numero++."' where inscription_id=" . $row['inscription_id'] . ";"); 
}?>
3
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
18 mai 2010 à 15:33
Salut,

je rencontre une difficulté dans la programmation


Quel est cette difficulté ?
0
cs_cy4nur3 Messages postés 17 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 27 mai 2010
18 mai 2010 à 15:38
j'arrive a faire un trie par ordre decroissant des joueurs mais ce que je n'arrive pas a faire c'est la gestion des points...

Le joueur qui a le plus haut classement obtient 1
Le joueur qui a un classement inférieur au premier obientient 2
Le joueur qui a un classement inférieur au second obientient 3

ainsi de suite...

Je n'arrive pas générer le code qui me permet de faire ca.
0
cs_cy4nur3 Messages postés 17 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 27 mai 2010
18 mai 2010 à 15:48
Voici la requete que je fait pour avoir L'id des joueurs,l'id du tournois,le num_appariement,son classement, son nom

SELECT inscription.joueurs_id, inscription.tournois_id, inscription.num_appariement, joueurs.joueurs_classement, CONCAT_WS( ' ', joueurs_nom, `joueurs_prenom` ) AS joueur
FROM joueurs, inscription, tournois
WHERE joueurs.joueurs_id = inscription.joueurs_id
AND tournois.tournois_id = inscription.tournois_id
AND tournois.tournois_id =1
ORDER BY joueurs.joueurs_classement DESC
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
18 mai 2010 à 16:22
Quand tu vas récupérer tes résultats, étant donné qu'ils sont déjà triés par classement, tu peux leur assigner le numéro quand tu fais le traitement dans ton code php.

<?php

$numero = 1;
$resultat = mysql_query('... ton SQL ...');

while ($row = mysql_fetch_assoc($result)) {
     echo 'Le numéro de ', $row['joueur'], ' est ', $numero;
     $numero++;
}

?>
0
cs_cy4nur3 Messages postés 17 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 27 mai 2010
18 mai 2010 à 16:31
C'est un bon début, et je te remercie pour le bout de code...
mais ce n'est pas exactement ce qu'il me faut.
il faut que ca alimante ma base.
En fait il faut, je pense, faire aussi un update...pour avoir ce n° dans ma base. apres j'en ai desoin pour la suite...
0
cs_cy4nur3 Messages postés 17 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 27 mai 2010
18 mai 2010 à 16:36
joueurs_id tournois_id num_appariement joueurs_classement joueur
1 1 1 2850 JP
4 1 2 1500 Jennifer
9 1 3 1002 Loic
10 1 4 602 Sylvie

voila ce que je voudrais obtenir...
0
cs_cy4nur3 Messages postés 17 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 27 mai 2010
18 mai 2010 à 16:39
joueurs_id tournois_id num_appariement joueurs_classement joueur
1__________1___________1_______________2850_______________JP
4__________1___________2_______________1500_______________Jennifer
9__________1___________3_______________1002_______________Loic
10_________1___________4_______________602________________Sylvie

Correction
0
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
18 mai 2010 à 17:01
Tu n'es pas obligé d'avoir ce champs dans ta base de données puisque tu peux toujours le calculé. Si tu as besoin de le calculer pour un joueur en particulier, tu peux toujours passer par une requête select imbriqué qui calcule le nombre de personne qui ont une cote plus élevé que la personne pour le tournoi. Quelque chose dans le genre :

<?php
$sql = 'SELECT' .
'   (SELECT COUNT(*) ' .
'   FROM joueurs j2, inscription, tournois WHERE j2.joueurs_id = inscription.joueurs_id ' .
'   AND tournois.tournois_id = inscription.tournois_id ' .
'   AND tournois.tournois_id =1 ' .
'   AND j2.classement>j.classement) ' .
'FROM joueurs j ' .
'WHERE j.joueurs_id =' . $id;
?>


Je peux pas vraiment tester d'où je suis, mais ça devrais être correct.
0
cs_cy4nur3 Messages postés 17 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 27 mai 2010
18 mai 2010 à 17:34
Je viens de modifier la table inscription:

CREATE TABLE IF NOT EXISTS `inscription` (
`inscription_id` int(10) NOT NULL AUTO_INCREMENT,
`num_appariement` int(10) DEFAULT NULL,
`tournois_id` int(10) DEFAULT NULL,
`joueurs_id` int(10) DEFAULT NULL,
`joueurs_classement` int(10) DEFAULT NULL,
PRIMARY KEY (`inscription_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

Voici le code PHP ma ca mets pas le bon resultat dans num_appariement:


$numero = 1;
$resultat mysql_query("SELECT * FROM `inscription` where `tournois_id`1 order by joueurs_classement DESC");

while ($row = mysql_fetch_assoc($resultat))
{
$numero++;
$resultat2 mysql_query("UPDATE `inscription` SET `num_appariement` '".$numero++."' where tournois_id=1;");
}
0
cs_cy4nur3 Messages postés 17 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 27 mai 2010
19 mai 2010 à 09:19
Bonjour,

Nous sommes sur la bonne voix.. le seul petit soucis maintenant c'est qu'au lieu de me mettre les numéros d'appariement dans la bon ordre du type 1,2,3,4 il me mets 2,4,6,8...

inscription_id num_appariement tournois_id joueurs_id joueurs_classement
1______________2_______________1___________1__________2850
3______________4_______________1___________8__________2007
2______________6_______________1___________7__________750
4______________8_______________1___________10_________602


Voici ce qu'il me faut dans num_appariement,

inscription_id num_appariement tournois_id joueurs_id joueurs_classement
1______________1_______________1___________1__________2850
3______________2_______________1___________8__________2007
2______________3_______________1___________7__________750
4______________4_______________1___________10_________602
0
cs_cy4nur3 Messages postés 17 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 27 mai 2010
19 mai 2010 à 09:28
Voici la solution

<?
include("connect.php");
$numero = 1;
$resultat mysql_query("SELECT * FROM `inscription` where `tournois_id` 1 order by joueurs_classement DESC");

while ($row = mysql_fetch_assoc($resultat))
{
$resultat2 mysql_query("UPDATE `inscription` SET `num_appariement` '".$numero++."' where inscription_id=" . $row['inscription_id'] . ";");
}
$numero++;
?>
0
Rejoignez-nous