0

私はこの件で一日中壁に頭をぶつけていました。それは私にとって苦労してきたので、それが本当に簡単ではないことを願っています! 誰かが私を助けてくれることを願って、私は一日中検索しました。

トレーニング キャンプのすべてのプレーヤーのフィットネス テストの結果を示す html テーブルがあります。それらをすべて名前とともに表示する方法を見つけました(別のmysqlテーブルから取得)。ここで、各テスト結果の横に、その特定のテスト結果に対するランク付けを追加したいと思います。これは、現在のコードからフィルタリング部分を除いたものです (これを解決する必要はないと思います)。

データベースクエリは以下です。コーチが見やすいように、すべてのディフェンス、すべてのフォワード、ゴールキーパーが一緒に表示されるように、テーブル内のプレーヤーをポジション別に並べ替えます。

//get the camp id for the coach logged in
$getcampid = "SELECT value FROM profile_values WHERE uid = '$user->uid'";   
$campid = mysql_query ($getcampid);
$campidrow = mysql_fetch_array($campid);
$coachescamp = $campidrow[0];

$getplayerdata = mysql_query("SELECT * FROM content_type_test 

INNER JOIN content_type_player ON content_type_test.field_player_uid=
content_type_player.field_uid 

WHERE content_type_test.field_training_camp_nid='$coachescamp' 

ORDER BY content_type_player.field_position_value") or die(mysql_error());

$left = true;
while($playerdata=mysql_fetch_array($getplayerdata))
{

echo "<td>", $playerdata['field_position_value'], "</td>";
echo "<td>", $playerdata['field_last_name_value'],", ",$playerdata['field_first_name_value'], "</td>";
echo "<td>", $playerdata['field_speed_value'], "</td>";
echo "<td>Show rank of players speed compared to other players in $getplayerdata query</td>";
echo "<td>", $playerdata['field_agility_value'], "</td>";
echo "<td>Show rank of players agility compared to other players in $getplayerdata query</td>";
echo"</tr>";
}
echo"</tbody></table>";

「プレーヤーのランクを表示...」と表示されている列に、プレーヤーの速度と敏捷性のランクを表示する必要があります。単純にするために含めなかったテーブルに、合計で 5 つのランクを表示する必要があります。この 2 つの方法を理解できれば、残りの 2 つについても実行できます。

注意: スピードと敏捷性は数値です。配列の最小の数字を 1 位にランク付けする必要があります。

これが私を殺しているのを助けてくれてありがとう。

編集 - - - - - - - - - - - - - - - - - - -

1つの結果のみを返すコードは次のとおりです

$getplayerdata = mysql_query("SELECT * FROM content_type_test 

INNER JOIN content_type_player ON content_type_test.field_player_uid=
content_type_player.field_uid 

WHERE content_type_test.field_training_camp_nid='$coachescamp' 

ORDER BY content_type_player.field_position_value") or die(mysql_error());

$left = true;
while($playerdata=mysql_fetch_array($getplayerdata))
{

$arrayOfAllData = array();
while($playerdata=mysql_fetch_array($getplayerdata)){
$arrayOfAllData[$playerdata[ID]] = array(field_position_value =>$playerdata['field_position_value'],
                                      field_last_name_value=>$playerdata['field_last_name_value'], 
                                      field_speed_value=>$playerdata['field_speed_value']);

}

$sql = mysql_query("SELECT @rownum:=@rownum+1 'rank', * FROM content_type_test, (SELECT @rownum:=0) r 
INNER JOIN content_type_player ON content_type_test.field_player_uid=
content_type_player.field_uid 
WHERE content_type_test.field_training_camp_nid='$coachescamp' 
ORDER BY content_type_player.field_speed_value");

while($playerdata=mysql_fetch_array($sql)){
    $arrayOfAllData[$playerdata[ID]]["field_speed_value"] = $playerdata['field_speed_value'];
}

foreach($arrayOfAllData as $player){
   echo "<td>", $player['field_position_value'], "</td>";
   echo "<td>", $player['field_last_name_value'],", ",$player['field_first_name_value'], "</td>";
   echo "<td>", $player['field_speed_value'], "</td>";
   echo "<td>*I dont know what to put here to display the rank*</td>";   
   echo"</tr>";
}
}
echo"</tbody></table>";

Print を実行すると、この配列のような 1 行が表示されます ( [] => Array ( [field_position_value] => Forward [field_last_name_value] => Tester [field_speed_value] => 4.504 ) )

また、1 つの列に記載されているように、ランクを表示するために何を入力すればよいかわかりません。

4

2 に答える 2

0

OK、1 つの MySQL クエリでこれを行うエレガントな方法はないため、複数のクエリを使用し、それらを配列に結合して、それをループして結果を取得します。ちょっとしたハックですが、仕事は完了します。

元のクエリを使用してから、ループしてすぐに表示する代わりに、ループして配列に入れます。

$arrayOfAllData = array();
while($playerdata=mysql_fetch_array($getplayerdata)){
$arrayOfAllData[$playerdata[ID]] = array(field_position_value =>$playerdata['field_position_value'],
                                          field_last_name_value=>$playerdata['field_last_name_value'], 
                                          field_speed_value=>$playerdata['field_speed_value'])

}

次に、field_speed_value でプレーヤーをランク付けする次の MySQL クエリを取得します。

$sql = mysql_query("SELECT @rownum:=@rownum+1 ‘rank’, * FROM content_type_test, (SELECT @rownum:=0) r 
INNER JOIN content_type_player ON content_type_test.field_player_uid=
content_type_player.field_uid 
WHERE content_type_test.field_training_camp_nid='$coachescamp' 
ORDER BY content_type_player.field_speed_value");

このクエリは、各プレーヤーのランキングを追加します。このランキングを $arrayOfAllData の値として追加する必要があります。

while($playerdata=mysql_fetch_array($sql)){
    $arrayOfAllData[$playerdata[ID]]["field_speed_value"] = $playerdata['field_speed_value']);
}

ランキングごとに新しいクエリを作成し、同じ方法で配列に追加します。次に、配列への追加がすべて完了したら、次のように出力できます。

foreach($arrayOfAllData as $player){
   echo "<td>", $player['field_position_value'], "</td>";
   echo "<td>", $player['field_last_name_value'],", ",$player['field_first_name_value'], "</td>";
....etc...
}

これがお役に立てば幸いです。私は疲れて就寝しています。問題がある場合は明日明確にすることができます。

于 2012-06-01T08:01:25.403 に答える