0

私は次の状況を達成しようとしています:

$mysql_query = "
  SELECT * 
  FROM st_users 
  WHERE 
      `user_comp_supervisor_id` = '$team_supervisor' AND 
      `user_exempt_from_goals` = '0' 
  ORDER BY 'calculate_progress_percent()' ASC
";

MySQLステートメントの関数による順序付けを実行できないことは知っていますが、返されたすべてのレコードを取得し、php関数の結果から高いものから低いものの順に並べる方法を理解しようとしています。どんなアイデアでも大歓迎です。私は今数時間これに頭を包み込もうとしています...:-(

        function diy_calc_progress_percent($user_id,$period_id,$period_week_number)
    {
        $this->user_id = $user_id;
        $this->period_id = $period_id;
        $this->period_week_number = $period_week_number;

        if ($this->period_week_number == 1)
        {
            $this->week_id = mysql_result( mysql_query(" SELECT `period_week_one` FROM `st_comp_periods` WHERE `period_id` = '$this->period_id' "),0 );
        }
        else if ($this->period_week_number == 2)
        {
            $this->week_id = mysql_result( mysql_query(" SELECT `period_week_two` FROM `st_comp_periods` WHERE `period_id` = '$this->period_id' "),0 );
        } 
        else
        {
            echo "Week number not valid.";
            exit();
        }

        $this->week_start_date = mysql_result( mysql_query(" SELECT `week_start_date` FROM `st_comp_weeks` WHERE `week_id` = '$this->week_id' "),0 );

        $this->week_end_date = mysql_result( mysql_query(" SELECT `week_end_date` FROM `st_comp_weeks` WHERE `week_id` = '$this->week_id' "),0 );

        $this->user_department = $this->user_info($this->user_id,"user_comp_department_id");

        $this->user_week_diy_goal = mysql_result( mysql_query(" SELECT `goal_diy_department` FROM `st_comp_department_goals` WHERE `goal_department_id` = '$this->user_department' AND `goal_week_id` = '$this->week_id' "),0 );

        $this->calc_totals_result = mysql_query("SELECT SUM(record_total_diy_revenue) AS user_week_total FROM `st_entered_records` WHERE `record_user_id` = '$this->user_id' AND `record_date` BETWEEN '$this->week_start_date' AND '$this->week_end_date'");
        $this->calc_totals_row = mysql_fetch_assoc($this->calc_totals_result);
        $this->user_week_total = $this->calc_totals_row['user_week_total']; 
        $this->user_week_one_percent = ($this->user_week_total / $this->user_week_diy_goal) * 100;
        $this->user_week_one_percent = number_format( (float)$this->user_week_one_percent, 2, '.', '' );

        return $this->user_week_one_percent;
    }
4

1 に答える 1

0

おそらく、配列のジャグリングを行う必要があります。最初に st_users からすべてのエントリを最初の配列 (mysql_query) に取得します。次に、その配列を実行し、エントリごとに calculate_progress_percent() を実行して、追加情報 ("user_progress_percent") を追加できる 2 番目の配列を作成します。 )。この後、新しい情報 ("user_progress_percent") で新しい配列を並べ替えることができます。

そして、ここにいくつかの簡単で汚いコードの提案があります – コードはテストされていません... もちろん... :)

初め:

$mysql_query = "SELECT * FROM st_users 
WHERE `user_comp_supervisor_id`='$team_supervisor' AND 
      `user_exempt_from_goals` = '0'";

次に、次のようなもの:

$i = 0;
while($tmp = mysql_fetch_array($mysql_query)) {
    $my_second_array[$i]['user_id'] = $tmp['user_id'];
    $user_id = $my_second_array[$i]['user_id'];
    diy_calc_progress_percent($user_id,$period_id,$period_week_number);
    $my_second_array[$i]['user_result'] = $diy_calc_progress_percent_result;
    $i++;
}

次に、ここで説明するように、その 2 番目の配列を並べ替えることができるはずです。

多次元配列を値で並べ替える

…これがいつか役立つことを願っています…</p>

于 2013-01-18T00:32:27.457 に答える