[PHP] Classement
Dernière réponse : dans Programmation
Bonjour,
Je suis en train de faire un classement de plusieurs championnat, mais je coince sur 2 choses
Voici la totalité de la page classement:
Tout fonctionne sauf le nombre de match nul je n'arrive pas a comparer les 2 tables score_equipe1 et score_equipe2 alors que j'ai réussi avec > et < pour les match gagner ou perdu mais == ne fonctionne pas.
Mon deuxième problème c'est que je dois classer les équipes par $nbr_point mais cette variable ne vient pas d'une requête SQL je ne peux donc pas faire ORDER BY...
Merci de votre aide =)
Je suis en train de faire un classement de plusieurs championnat, mais je coince sur 2 choses
Voici la totalité de la page classement:
<?php
require ('config.php');
mysql_connect ("$host", "$user", "$pass");
mysql_select_db ("$bdd");
$championnat_id = mysql_real_escape_string(htmlspecialchars($_GET['championnat_id']));
$req = mysql_query ("SELECT tag FROM championnat WHERE id = '$championnat_id'");
$rep = mysql_fetch_array($req);
$championnat_tag = $rep['tag'];
mysql_close();
?>
<h3>Classement de la [<?php echo $championnat_tag; ?>]</h3>
<div class="block">
<table width="100%" cellpadding="0" cellspacing="Ø">
<tr>
<td width="5%">#</td>
<td width="45%">Equipe</td>
<td width="5%">J</td>
<td width="5%">G</td>
<td width="5%">N</td>
<td width="5%">P</td>
<td width="5%">BP</td>
<td width="5%">BC</td>
<td width="10%">Diff</td>
<td width="10%">Point</td>
</tr>
<?php
/////////////////////////////////////////////////////
// AFFICHAGE DU CLASSEMENT
/////////////////////////////////////////////////////
require ('config.php');
mysql_connect ("$host", "$user", "$pass");
mysql_select_db ("$bdd");
$rang = 1;
$equipe = mysql_query ("SELECT * FROM equipes WHERE championnat_id = '$championnat_id'");
while ($rep_equipe = mysql_fetch_array($equipe)) {
$equipe_id = $rep_equipe['id'];
$equipe_championnat_id = $rep_equipe['championnat_id'];
$equipe_nom = $rep_equipe['nom'];
$nbr_gagner_dom = mysql_query ("SELECT COUNT(*) AS nbr_match_gagner_dom FROM `match` WHERE equipe1_id = '$equipe_id' AND score_equipe1 > score_equipe2 AND championnat_id = '$equipe_championnat_id'");
while ($res_nbr_gagner_dom = mysql_fetch_array($nbr_gagner_dom)) {
$nbr_match_gagner_dom = $res_nbr_gagner_dom['nbr_match_gagner_dom'];
$nbr_gagner_ext = mysql_query ("SELECT COUNT(*) AS nbr_match_gagner_ext FROM `match` WHERE equipe2_id = '$equipe_id' AND score_equipe2 > score_equipe1 AND championnat_id = '$equipe_championnat_id'");
while ($res_nbr_gagner_ext = mysql_fetch_array($nbr_gagner_ext)) {
$nbr_match_gagner_ext = $res_nbr_gagner_ext['nbr_match_gagner_ext'];
$nbr_nul = mysql_query ("SELECT COUNT(*) AS nbr_match_nul FROM `match` WHERE equipe1_id = '$equipe_id' OR equipe2_id = '$equipe_id' AND score_equipe1 = score_equipe2 AND championnat_id = '$equipe_championnat_id'");
while ($res_nbr_nul = mysql_fetch_array($nbr_nul)) {
$nbr_match_nul = $res_nbr_nul['nbr_match_nul'];
$nbr_perdu_dom = mysql_query ("SELECT COUNT(*) AS nbr_match_perdu_dom FROM `match` WHERE equipe1_id = '$equipe_id' AND score_equipe1 < score_equipe2 AND championnat_id = '$equipe_championnat_id'");
while ($res_nbr_perdu_dom = mysql_fetch_array($nbr_perdu_dom)) {
$nbr_match_perdu_dom = $res_nbr_perdu_dom['nbr_match_perdu_dom'];
$nbr_perdu_ext = mysql_query ("SELECT COUNT(*) AS nbr_match_perdu_ext FROM `match` WHERE equipe2_id = '$equipe_id' AND score_equipe2 < score_equipe1 AND championnat_id = '$equipe_championnat_id'");
while ($res_nbr_perdu_ext = mysql_fetch_array($nbr_perdu_ext)) {
$nbr_match_perdu_ext = $res_nbr_perdu_ext['nbr_match_perdu_ext'];
$nbr_but_pour_dom = mysql_query ("SELECT SUM(score_equipe1) AS nbr_but_pour_dom FROM `match` WHERE equipe1_id = '$equipe_id' AND championnat_id = '$equipe_championnat_id'");
while ($res_nbr_but_pour_dom = mysql_fetch_array($nbr_but_pour_dom)) {
$nbr_but_pour_dom = $res_nbr_but_pour_dom['nbr_but_pour_dom'];
$nbr_but_pour_ext = mysql_query ("SELECT SUM(score_equipe2) AS nbr_but_pour_ext FROM `match` WHERE equipe2_id = '$equipe_id' AND championnat_id = '$equipe_championnat_id'");
while ($res_nbr_but_pour_ext = mysql_fetch_array($nbr_but_pour_ext)) {
$nbr_but_pour_ext = $res_nbr_but_pour_ext['nbr_but_pour_ext'];
$nbr_but_contre_dom = mysql_query ("SELECT SUM(score_equipe1) AS nbr_but_contre_dom FROM `match` WHERE equipe2_id = '$equipe_id' AND championnat_id = '$equipe_championnat_id'");
while ($res_nbr_but_contre_dom = mysql_fetch_array($nbr_but_contre_dom)) {
$nbr_but_contre_dom = $res_nbr_but_contre_dom['nbr_but_contre_dom'];
$nbr_but_contre_ext = mysql_query ("SELECT SUM(score_equipe2) AS nbr_but_contre_ext FROM `match` WHERE equipe1_id = '$equipe_id' AND championnat_id = '$equipe_championnat_id'");
while ($res_nbr_but_contre_ext = mysql_fetch_array($nbr_but_contre_ext)) {
$nbr_but_contre_ext = $res_nbr_but_contre_ext['nbr_but_contre_ext'];
$nbr_match_gagner = $nbr_match_gagner_dom + $nbr_match_gagner_ext;
$nbr_match_perdu = $nbr_match_perdu_dom + $nbr_match_perdu_ext;
$nbr_but_pour = $nbr_but_pour_dom + $nbr_but_pour_ext;
$nbr_but_contre = $nbr_but_contre_dom + $nbr_but_contre_ext;
$nbr_diff = $nbr_but_pour - $nbr_but_contre;
$nbr_point = ($nbr_match_gagner * 3) + $nbr_match_nul;
$nbr_match_jouer = $nbr_match_gagner + $nbr_match_nul + $nbr_match_perdu;
if ($nbr_diff > 0) {
$calcul_diff = "+$nbr_diff";
} else {
$calcul_diff = $nbr_diff;
}
array_multisort($nbr_point, SORT_NUMERIC, SORT_DESC);
echo "
<tr>
<td>$rang.</td>
<td><a href=\"?page=equipe&equipe_id=$equipe_id\">$equipe_nom</a></td>
<td>$nbr_match_jouer</td>
<td>$nbr_match_gagner</td>
<td>$nbr_match_nul</td>
<td>$nbr_match_perdu</td>
<td>$nbr_but_pour</td>
<td>$nbr_but_contre</td>
<td>$calcul_diff</td>
<td>$nbr_point</td>
</tr>
";
$rang++;
}}}}}}}}}}
mysql_close();
?>
</table>
</div>
Tout fonctionne sauf le nombre de match nul je n'arrive pas a comparer les 2 tables score_equipe1 et score_equipe2 alors que j'ai réussi avec > et < pour les match gagner ou perdu mais == ne fonctionne pas.
Mon deuxième problème c'est que je dois classer les équipes par $nbr_point mais cette variable ne vient pas d'une requête SQL je ne peux donc pas faire ORDER BY...
Merci de votre aide =)
Autres pages sur : php classement
Lassé par la pub ? Créez un compte
@Crazycat:
Se sont juste les champ minimum pour pouvoir faire le classement hors des matchs.
@OmaR: Oui je sais pour le while mais que je fasse une boucle ou une condition, ce n'est pas pareil? Si je n'imbrique pas je n'ai qu'un affichage...
Je suis obligé de faire autant de requête, ou alors il sera préférable de créer une table classement?
CREATE TABLE IF NOT EXISTS `match` ( `id` int(11) NOT NULL AUTO_INCREMENT, `championnat_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `equipe1_id` varchar(3) COLLATE utf8_unicode_ci NOT NULL, `equipe2_id` varchar(3) COLLATE utf8_unicode_ci NOT NULL, `score_equipe1` varchar(2) COLLATE utf8_unicode_ci NOT NULL, `score_equipe2` varchar(2) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`) )
Se sont juste les champ minimum pour pouvoir faire le classement hors des matchs.
@OmaR: Oui je sais pour le while mais que je fasse une boucle ou une condition, ce n'est pas pareil? Si je n'imbrique pas je n'ai qu'un affichage...
Je suis obligé de faire autant de requête, ou alors il sera préférable de créer une table classement?
Tu peux faire une seule requête et ensuite travailler avec le recordset.
La requête principale serait du genre:
A partir de là, tu peux obtenir un bon gros tableau associatif en PHP qui ne fera pas exploser ta base. Et tes calculs pourront être fait directement en php.
La requête principale serait du genre:
SELECT m.*, e1.name, e2.name, c.*
FROM `match` m
JOIN `equipes` e1 ON (e1.id = m.equipe1_id)
JOIN `equipes` e2 ON (e2.id = m.equipe2_id)
JOIN `championnat` c ON (c.id=m.championnat_id)
WHERE (
m.championnat_id=".$_GET['championnat_id']."
)
A partir de là, tu peux obtenir un bon gros tableau associatif en PHP qui ne fera pas exploser ta base. Et tes calculs pourront être fait directement en php.
allstar27 a dit :
@OmaR: Oui je sais pour le while mais que je fasse une boucle ou une condition, ce n'est pas pareil? Si je n'imbrique pas je n'ai qu'un affichage...Ta première boucle qui boucle sur toutes les équipes, faut la garder évidemment, mais les autres pas besoin, vu que tu n'auras qu'un seul résultat.
Dans tous les cas, il vaut mieux faire le moins de requêtes possibles, comme expliqué par crazycat
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumClassement ordre alphabetique php tableaux dimensions
- ForumFaire un classement php
- ForumScript php championnat classement
- ForumClassement php
- solutionsClassement par ordre alphabetique php
- solutionsClassement php sql
- ForumClassement en php
- ForumClasse php
- ForumPhp recuperer une variable dans une classe
- ForumPhp - les classes
- Voir plus