IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

transmettre une variable à une vue


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    496
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 496
    Points : 123
    Points
    123
    Par défaut transmettre une variable à une vue
    Bonjour
    j'ai une table qui stocke le score de chaque fin de partie de jeu de chaque joueur.
    table: donnes_players
    colonnes: id_player, score, id_donne (N° de la partie jouée).

    Mon but est de faire un classement à chaque fin de partie d'1 joueur pour tous les joueurs (de cette partie).
    Le classement est établi sur le nombre de joueurs total de la partie,
    le nombre de joueurs qui ont un score supérieur au score du joueur,
    le nombre de joueurs qui ont le même score que le joueur.

    Donc à chaque fin de partie d'1 joueur ces 3 paramètres vont faire varier le classement de tous les autres joueurs(pour cette partie), donc il faut recalculer le classement pour chaque joueur.

    J'ai fait avec 2 vues le calcul des scores supérieurs et des mêmes scores
    une requête fait appel à ces deux vues et effectue le calcul du classement pour tous les joueurs et qui peut maintenant être affiché.
    (j'ai fait 2 vues car je n'arrivais pas à sortir les 2 valeurs NscoreSup et NMemeScore pour chaque joueur pour cette partie)

    Voici mon problème: dans ces vues j'ai fixé à 1 l'id_donne mais comment bien sûr faire pour avoir les classements sur les autres donnes si on ne peut pas transmettre de variable.

    voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #création de la vue pour le calcul des scores supérieurs
    CREATE OR REPLACE VIEW v_NscoreSup (id_players, score, NscoreSup)
    AS
    SELECT  t1.id_players,t1.score, COUNT(t2.score) AS NscoreSup
    FROM donnes_players AS t1
    INNER JOIN donnes_players AS t2
    ON t2.score >= t1.score 
    WHERE t1.id_donnes=1 AND t2.id_donnes=1
    GROUP BY t1.id_players,t1.score
    ORDER BY score DESC, id_players
    
    #Création de la vue pour les mêmes scores
    CREATE OR REPLACE VIEW v_NMemeScore (id_players, score, NscoreSup)
    AS
    SELECT  t1.id_players,t1.score, COUNT(t2.score) AS NscoreSup
    FROM donnes_players AS t1
    INNER JOIN donnes_players AS t2
    ON t2.score = t1.score 
    WHERE t1.id_donnes=1 AND t2.id_donnes=1
    GROUP BY t1.id_players,t1.score
    ORDER BY score DESC, id_players
    
    #Requête permettant d'afficher le classement
    SET @id_donnes:=1;
    SELECT Meme.id_players,Meme.score
    ,(((100*(((SELECT @nbreplayer:=nbrePlayer  FROM donnes WHERE id=@id_donnes)-1)-(Sup.NscoreSup-Meme.NMemeScore)-(0.5*(Meme.NMemeScore-1))))/(@nbreplayer-1)))AS Classement 
    FROM v_nmemescore AS Meme
    INNER JOIN v_nscoresup AS Sup
    ON Meme.id_players=Sup.id_players

  2. #2
    Membre averti
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2017
    Messages : 279
    Points : 421
    Points
    421
    Par défaut
    Il te faut une procédure stockée avec précision des variables (IN pour les variables d'entrée, OUT pour les variables de sortie et INOUT pour les variables d'entrée/sortie).
    L’appétit vient en mangeant.
    Pourquoi compliquer quand on peut faire plus simple?
    Une réponse vous a été utile? pensez à
    Vous avez eu la réponse à votre question? marquez votre discussion
    Faites un tour aux FAQs et aux tutoriels et cours.

  3. #3
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    496
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 496
    Points : 123
    Points
    123
    Par défaut
    Bonsoir

    Après bien des test et une refonte de ma requête

    j'ai testé la procédure stockée et l'appel et affichage en php mais qu'elle soit exécuter directement ou par la procédure stockée le temps d'exécution est toujours de 120 secondes.

    même si j'appel la procédure plusieurs fois de suite je ne gagne rien

    voici le code de la requête stockée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
       <head>
           <title>Création requête stockée du Classement du tournois</title>
           <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    	   <link rel="stylesheet" href="bridgez.css" />
       </head>
       <body>
    <?php
    include("/ConnexionBaseBridgez.php");
    $connexion=connexionBaseBridgez();//connexion à Base de donnée test (qui fonctionne)
     
     
    //création d'une requête stockée
     
    $sql="
    CREATE PROCEDURE affichage_Classement_tournois (IN p_id_tournois INT)  
       
    BEGIN
        SELECT
    	id_tournois AS Tournois
        ,id_players AS Id_players
    	,pl.pseudo AS Pseudo
    	,(SUM(((100*((((SELECT COUNT(*) FROM donnes_players AS dp5 WHERE dp5.id_donnes=dp9.id_donnes)) -1) 
          - (SELECT COUNT(*) FROM donnes_players AS dp6 WHERE dp6.id_donnes=dp9.id_donnes AND dp6.score > dp9.score) 
          - (0.5*((SELECT COUNT(*) FROM donnes_players AS dp4 WHERE dp4.id_donnes=dp9.id_donnes AND dp4.score = dp9.score)-1))))
           /((SELECT COUNT(*) FROM donnes_players AS dp5 WHERE dp5.id_donnes=dp9.id_donnes)-1))
    	   *(SELECT COUNT(*) FROM donnes_players AS dp5 WHERE dp5.id_donnes=dp9.id_donnes)))
           /(SUM((SELECT COUNT(*) FROM donnes_players AS dp5 WHERE dp5.id_donnes=dp9.id_donnes))) AS Classement
                   
    FROM donnes_players AS dp9
    INNER JOIN players AS pl
    	ON dp9.id_players = pl.id
    WHERE dp9.id_tournois = p_id_tournois
    GROUP BY dp9.id_players;
    END 
    
    ";
     
    $connexion->query($sql);
     
    ?>
     
       </body>
    </html>
    et voici l'appel de la procédure stockée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
       <head>
           <title>Affichage du Classement du tournois</title>
           <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    	   <link rel="stylesheet" href="bridgez.css" />
       </head>
       <body>
    <?php
     
    include("/ConnexionBaseBridgez.php");
    $connexion=connexionBaseBridgez();//connexion à Base de donnée test (qui fonctionne)
    // timestamp en millisecondes du début du script (en PHP 5)
     
    $timestamp_debut = microtime(true);
    $id_tournois=1;
    $i=0;
    while($i<1)
    {
    $i++;
     
    //Exécution de la procédure stockée
      $sql = ("Call affichage_Classement_tournois(1)");
      $rep=$connexion->query($sql);
     
    ?>
     
    <table>
       <caption>Affichage du Classement du tournois <?php echo $id_tournois; ?> :</caption>
    	<!-- //echo 'Affichage du Classement de la donne  : ' .$id_donnes.' <br/>'; -->
     
    	<br/>
    	<tr>
    		<th>Id_players</th>		
    		<th>Pseudo</th>		
    		<th>Classement</th>	
    	</tr>
     
    <?php
    	while ($donnees = $rep->fetch()){ 
    ?>	
     
    	<tbody>			 
    	<tr>
    		<td><?php echo $donnees['Id_players'];?></td>
    		<td><?php echo $donnees['Pseudo'];?></td>
    		<td><?php echo $donnees['Classement'];?></td>
    	</tr>
     
    <?php		
        } //fin de la boucle
    }
    ?>
     
    	</tbody>	
    </table>
     
    <?php	
     
     
     // timestamp en millisecondes de la fin du script
    $timestamp_fin = microtime(true);
    // différence en millisecondes entre le début et la fin
    $difference_ms = $timestamp_fin - $timestamp_debut;
    // affichage du résultat
    echo '<br/> Affichage '.$i.' fois le classement en : '. $difference_ms.'  secondes <br/>';
     
     
    ?>
     
       </body>
    </html>

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/08/2006, 16h40
  2. [VB6]Passer une variable à une procédure évennementielle
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 13/12/2005, 19h19
  3. affecter le résultat d'une requête à une variable
    Par zut94 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 06/10/2005, 17h21
  4. Affecter résultat SQL d'une requête à une variable
    Par bozolozo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 02/01/2005, 17h37
  5. Réponses: 10
    Dernier message: 19/02/2004, 12h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo