2017-04-19 132 views
0

我的情況: 我有一個包含玩家數據的表(「玩家」)。它包含字段:姓名,lv分,itf分和總分(自動生成,lv分+ itf分)和性別。同一張表包含關於男性和女性的數據。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個數字。換句話說,它不是持久的。 – ArtisticPhoenix

回答

0

就我個人而言,我會在飛行中計算排名。相反,您需要在修改數據後計算並將其存儲在表中。

這將需要更多的代碼,然後我很關心現在發佈,但基本的想法是,當有什麼改變。說一個玩家獲得更多的「積分」,你會重新計算每個玩家的等級,然後將其存儲在同一個表中,或者存儲在一個單獨但相關的表中。

通過這種方式,當需要執行查詢時,您的數據全部存在,這是一項微不足道的任務。

你現在怎麼做的問題是數據沒有被保存,因此你以後不能查詢。

這樣做的唯一方法就是過濾通過創建該值的第一個(第二個)查詢的結果集。這將會令人望而生畏,因爲你會把所有玩家拉出來,然後用PHP來篩選你想要的玩家。

當表中的數據發生變化並且有一個簡單的數值處理時,通過重新計算來加載執行計算的性能成本會更好。