PHP MySQL从临时列获取数据

时间:2017-04-19 16:56:28

标签: php mysql

我的情况: 我有一个表('玩家'),其中包含有关玩家的数据。它有字段:名称,姓氏,lv点,itf点和总点数(自动生成,lv点+ itfpoints)和性别。同一张表包含有关男性和女性的数据。

我想要做的是创建一个列或选择临时列“Rank”,它将基于总点数。

示例:

| 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>
      ';

    }

    ?>

如果你有任何想法如何实现它,请大声喊叫!

1 个答案:

答案 0 :(得分:0)

就个人而言,我会暂时不计算排名。相反,您需要在修改数据后计算并将其存储在表中。

这将需要更多的代码然后我现在发布,但基本的想法是,当一些事情发生变化。假设玩家得到更多&#34;积分&#34;你会重新计算每个玩家的等级,然后将其存储在同一个表中,或者存储在一个单独但相关的表中。

这样,当需要进行查询时,您的数据就在那里,这是一项微不足道的任务。

现在你如何做的问题是,数据没有得到保存,因此你以后无法对其进行查询。

这样做的唯一方法是过滤通过创建该值的第一个(第二个)查询的结果集。这将是令人望而却步的表现,因为你会将所有玩家拉出来,然后使用PHP筛选你想要的玩家。

通过在表格中的数据发生变化时重新计算并使用简单的数值来预先加载计算的性能成本,这样做会更好。