Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从多行、算术、排序中选择Mysql数据_Php_Mysql_Sorting - Fatal编程技术网

Php 从多行、算术、排序中选择Mysql数据

Php 从多行、算术、排序中选择Mysql数据,php,mysql,sorting,Php,Mysql,Sorting,我正在从mysql数据库中提取数据。我想添加多次跑步的长度,并根据跑得最远的人的等级对其进行排序 function determineLength($db, $name){ $getLength = "select length from $db where name = $name and sex = 'male'"; $gettingLength = mysql_query($getLength); while($gotLenth = mysql_

我正在从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'];
然后将$ALENGHT、$BLENGHT、$CLENGHT…存储到一个数组中,并按这种方式对它们进行排序。 这似乎是错误的做法,更不用说冗余和缓慢了。数据库中有超过40k行的数据,因此尝试这样做会在数据库中运行超过120万次?!我可以将一个名称数组传递到函数中,然后在mysql代码中使用ORDER BY length DESC吗

我需要帮助。谢谢大家!

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

我将如何使用此方法回显实际排名?我已经把他的精选语句替换成了我上面的语句,但是我该如何回应一个人的排名呢?我可以将结果保存到数组中,然后回显键吗

如果我正确理解您的情况,您只需在一条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
列以获得此人的排名。

如果我正确理解您的情况,您只需在一条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
列中引用此人的排名。

谢谢,这很有效。这正是我正在尝试做的。我如何使用此方法回显实际排名?我已经将这个select语句替换为我上面的语句,但是我该如何回应一个人的排名呢?我可以将结果保存到数组中然后回显键吗?@user903497,最好的方法是在php中创建一个增量变量,例如
$I
,然后在每次迭代
foreach
while
循环时,回显它,然后增加它:(即
$I++;
)。或者,您也可以在SQL中进行正确的排名,正如我在上面编辑的答案中所指出的。谢谢zane。很抱歉没有回答你的问题。我只是不确定是否有人会看到我又问了一个问题。再次感谢。谢谢你,成功了。这正是我正在尝试做的。我如何使用此方法回显实际排名?我已经将这个select语句替换为我上面的语句,但是我该如何回应一个人的排名呢?我可以将结果保存到数组中然后回显键吗?@user903497,最好的方法是在php中创建一个增量变量,例如
$I
,然后在每次迭代
foreach
while
循环时,回显它,然后增加它:(即
$I++;
)。或者,您也可以在SQL中进行正确的排名,正如我在上面编辑的答案中所指出的。谢谢zane。很抱歉没有回答你的问题。我只是不确定是否有人会看到我又问了一个问题。再次感谢。