gpt4 book ai didi

php - 从多行中选择Mysql数据,算术,排序

转载 作者:行者123 更新时间:2023-12-01 00:27:34 28 4
gpt4 key购买 nike

我正在从 mysql 数据库中提取数据。我想添加多次运行的长度,并按照跑得最远的人的排名对它们进行排序。

    function determineLength($db, $name){
$getLength = "select length from $db where name = $name and sex = 'male'";
$gettingLength = mysql_query($getLength);
while($gotLenth = mysql_fetch_array($gettingLength)){

more code that calculates total length and returns it as $lengthAccumulator
}
return array('totalLength'=>$lengthAccumulator);
}

现在,我有 30 只不同的雄性,它们的名字永远不会改变,我需要对它们进行筛选和分类。我应该如何在没有冗余的情况下为每个人运行 mysql 代码?我只能这样想 -

    $name = john;
$a = determineLength($db, $name);
$aLength = $a['totalLength'];

$name = sam;
$b = determineLength($db, $name);
$bLength = $b['totalLength'];

$name = henry;
$c = determineLength($db, $name);
$cLength = $c['totalLength'];

$name = ted;
$d = determineLength($db, $name);
$dLength = $d['totalLength'];

然后将 $aLength、$bLength、$cLength...存储到一个数组中,然后按这种方式对它们进行排序。这似乎是错误的方法,更不用说冗余和缓慢了。数据库中有超过 40,000 行数据,因此尝试以这种方式执行此操作会在数据库中运行超过 120 万次?!我可以将名称数组传递给函数,然后在 mysql 代码中使用 ORDER BY 长度 DESC 吗?

我需要帮助。谢谢!

    ****the answer below by zane seemed to work to order the runners, but   

如何使用此方法回应实际排名?我已将他的选择语句替换为我上面的选择语句,但我将如何回应一个人的等级?我可以将结果保存到数组中然后回显 key 吗?

最佳答案

如果我对你的情况的理解正确,你可以简单地在一个 SQL 语句中执行此操作:

SELECT   name
FROM $db
GROUP BY name
ORDER BY SUM(length) DESC

而且所有内容都已直接从结果集中排序。无程序代码。

上面获取所有运行者,但如果你想获得一组特定的男性运行者,你可以添加一个 WHERE 子句,如下所示:

SELECT   name
FROM $db
WHERE name IN ('name1', 'name2', 'name3', 'etc...') AND
sex = 'male'
GROUP BY name
ORDER BY SUM(length) DESC

要在实际的SQL中排名,你可以这样做:

SELECT     name, @rank:=@rank+1 AS rank
FROM $db
CROSS JOIN (SELECT @rank:=0) val_init
WHERE name IN ('name1', 'name2', 'name3', 'etc...') AND
sex = 'male'
GROUP BY name
ORDER BY SUM(length) DESC

然后引用 php 中的 rank 列作为此人的排名。

关于php - 从多行中选择Mysql数据,算术,排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11753194/

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