我正在從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'];
然後存儲在$ aLength,$ bLength,$ cLength ...到一個數組中,並將它們整理出來的方式。 這似乎是錯誤的做法,更不用說多餘和緩慢。數據庫中有超過40k行數據,因此試圖以這種方式執行數據將在數據庫中超過1.2百萬次?我可以傳遞一個名稱數組到該函數中,然後在mysql代碼中使用ORDER BY長度DESC嗎?
我需要幫助。謝謝!
****the answer below by zane seemed to work to order the runners, but
我將如何使用此方法回顯實際排名?我用他的選擇語句代替了我上面的那個,但是我怎麼去迴應一個人的等級呢?我可以將結果保存到數組中然後回顯密鑰嗎?
謝謝你,工作。這正是我想要做的。 – 2012-08-01 06:15:51
我將如何使用此方法迴應實際排名?我用這個選擇語句代替了上面的那個,但是我怎麼去迴應一個人的等級呢?我可以將結果保存到數組中然後回顯密鑰嗎? – 2012-08-03 19:23:31
@ user903497,那麼最好的方法就是在php中創建一個增量變量,比如'$ i',然後在每個迭代的foreach或while循環中回顯出來,然後遞增: (即'$ i ++;')。或者,您可以在SQL中正確執行排名,正如我在上面編輯的答案中所述。 – 2012-08-03 19:34:22