gpt4 book ai didi

PHP MySQL 从临时列中获取数据

转载 作者:行者123 更新时间:2023-11-29 19:05:58 24 4
gpt4 key购买 nike

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

我想要做的是创建一个列或选择基于总分的临时列“排名”。

示例:

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

然后我想获取特定名称的数据,例如

从玩家中选择排名,其中 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>
';

}

?>

如果您有任何想法如何实现,请大声喊出来!

最佳答案

就我个人而言,我会放弃动态计算排名。相反,您需要在修改数据后计算此值并将其存储在表中。

这将需要更多的代码,然后我现在就想发布,但基本的想法是当事情发生变化时。假设一名玩家获得了更多“积分”,您将重新计算每个玩家的排名,然后将其存储在同一个表中,或者存储在单独但相关的表中。

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

您现在如何执行此操作的问题是数据未保存,因此您以后无法对其进行查询。

像这样即时执行此操作的唯一方法是过滤创建该值的第一个(第二个)查询的结果集。这在性能方面会令人望而却步,因为您将拉出所有玩家,然后使用 PHP 从他们中筛选出您想要的玩家。

最好通过在表中的数据发生变化时重新计算来预先加载计算的性能成本,并使用一个简单的数值。

关于PHP MySQL 从临时列中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43501780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com