2017-04-19 3 views
0

私の状況: 私はプレーヤーに関するデータを含むテーブル( 'players')を持っています。フィールドには名前、姓、lvポイント、itfポイント、合計ポイント(自動生成、lvポイント+ itfpoint)、性別があります。同じテーブルには、男性と女性に関するデータが含まれています。PHP MySQLは一時的な列からデータを取得します

私がしたいのは、列を作成するか、合計点に基づく一時列「ランク」を選択することです。

例:

| rank (temp_col) | name | totalpoints 
| 1 | Nick  | 199 
| 2 | Rob  | 190 
| 3 | Alex  | 155 
| 4 | Max  | 144 

そして私は

SELECT rank FROM players WHERE name = 'Nick

私は各プレイヤーのために別のページを持っているように、特定の名前のためのデータを取得したいと私はランクを表示したいです一人一人

私のPHPコード:

<?php 

    $sql = "SELECT *, (lvpoints + itfpoints) AS totalpoints FROM players WHERE club = 'TENNISJOY' ORDER BY gender DESC, totalpoints DESC"; 

    $result = mysqli_query($conn, $sql); 

    $i = 0; 
    while($row = mysqli_fetch_assoc($result)){ 

     $i += 1; 
     $name = $row['name']; 
     $surname = $row['surname']; 
     $gender = $row['gender']; 

     $sql2 = "SELECT *, (lvpoints + itfpoints) AS totalpoints FROM players WHERE gender = '$gender' AND name='$name' AND surname='$surname' ORDER BY totalpoints DESC"; 
     $result2 = mysqli_query($conn, $sql2); 
     $row2 = mysqli_fetch_assoc($result2); 

     $points = $row2['totalpoints']; 

     $sql3 = "SELECT 
      (@cnt := @cnt + 1) AS rank, 
      surname, name, (lvpoints + itfpoints) AS totalpoints, lvpoints, itfpoints, club 
      FROM players 
      JOIN (SELECT @cnt := 0) AS dummy 
      WHERE gender='$gender'"; 

     $result3 = mysqli_query($conn, $sql3); 
     $row3 = mysqli_fetch_assoc($result3); 

     $rank = $row3['rank']; 



     echo ' 
     <div class="row"> 
     <div class="col-md-4"> 
      <div class="well dash-box"> 

      <h4> <a href="#">' . $i . '. ' . $surname . ' ' . $name. '</a> ('. $gender . ') '. '</h4> 
      <img src="img/noava.png" height="200px" width="200px" /> 
      </div> 
      </a> 
     </div> 
     <div class="col-md-8"> 
      <div class="well dash-box"> 

      <h4 align="left">Player details</h4> 

      <p align="left">LV Rank : ' . $rank . '<br/><br/> 
      Total points : ' . $points .'<br/> 
      LV points : ' . $row['lvpoints'] . '<br/> 
      <br/> 
      ITF Rank : <br/> 
      ITF Points : ' . $row['itfpoints'] . '<br/> 
      </p> 
      </div> 
      </a> 
     </div> 
     </div> 
     '; 

    } 

    ?> 

あなたは、叫びを与え、それをしてください実装する方法任意のアイデアを持っている場合は!

+0

Rankはちょうど増分された数値で、クエリの結果セットに基づいています。したがって、1つの名前を選択すると1つの数値しか得られません。つまり、永続的ではありません。 – ArtisticPhoenix

答えて

0

個人的には、私はランクを計算することをやめます。代わりに、データを変更した後、これを計算してテーブルに格納することをお勧めします。

これはもっとコードが必要ですが、私は現在投稿していますが、基本的なアイディアは何かが変わったときです。プレイヤーが各プレイヤーのランクを再計算する「ポイント」を増やしてから、同じテーブルに保存するか、別の関連するものに保存するとします。

このようにしてクエリを実行するときは、データはすべてそこにあり、それは簡単な作業です。

あなたが今やっていることの問題は、データが保存されないため、後でそれに対してクエリを実行できないことです。

これを実行する唯一の方法は、その値を作成する最初の(2番目の)クエリの結果セットをフィルタすることです。これは、すべてのプレーヤーを引き出し、PHPを使用したいプレイヤーのために選別してしまうため、パフォーマンスが賢明ではありません。

表のデータが変更されたときにこれを再計算し、単純な数値を使用すると、計算のパフォーマンス・コストをフロント・ロードする方がよいでしょう。

関連する問題