php - 如何使用 PHP 从 MySQL 查询中按升序排列值?

标签 php html mysql sql-order-by

我正在使用以下 PHP 脚本从 MySQL 表中获取和更改数据,并将结果打印在 HTML 表中。我希望通过 $utilization_percentage 变量按升序排列数据,该变量由 $total_client_time/$total_available_time * 100 创建。这发生在 $sql 查询之后,所以我想知道这是否可以用 PHP 完成?或者有没有办法改变 MySQL 查询以在查询中计算 $utilization_percentage,然后我可以在查询中运行 ORDER BY 子句?实现这一目标的最佳方法是什么?

<?php

require_once 'tm-config.php';

// create connection
$conn = new mysqli($tmcurrentConfig['host'], $tmcurrentConfig['user'], $tmcurrentConfig['pass'], $tmcurrentConfig['name']);
// check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT SUM(t.available_time) AS total_available_time, 
                SUM(t.chargeable_time) AS total_chargeable_time, 
                SUM(t.admin_time) AS total_admin_time, 
                SUM(t.new_business_time) AS total_new_business_time, 
                c.name AS companyName 
        FROM Timesheet t 
        LEFT JOIN fos_user u ON(u.id = t.user_id) 
        LEFT JOIN company c ON(c.id = u.company_id) 
        GROUP BY u.company_id";

$result = $conn->query($sql);

if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
  $total_available_time = $row["total_available_time"];
  $total_chargeable_time = $row["total_chargeable_time"];
  $total_admin_time = $row["total_admin_time"];
  $total_new_business_time = $row["total_new_business_time"];
  $total_client_time = $total_chargeable_time + $total_admin_time + $total_new_business_time;
  $utilization = $total_client_time / $total_available_time;
  $utilization_percentage = $utilization * 100;
  $company_name = $row["companyName"];
  // echo data into HTML table
  echo
  "<tbody>" . "<tr>" . "<td>" . $company_name . "</td>" . "<td>" . round($utilization_percentage) . " %" . "</td>" . "</tr>" . "</tbody>";
 }
 } else {
 echo "No results";
}
$conn->close();

最佳答案

您可以在查询中计算它,然后在 ORDER BY 中使用它。

$sql = "SELECT SUM(t.available_time) AS total_available_time, 
                SUM(t.chargeable_time) AS total_chargeable_time, 
                SUM(t.admin_time) AS total_admin_time, 
                SUM(t.new_business_time) AS total_new_business_time, 
                c.name AS companyName,
                (SUM(t.chargeable_time) + SUM(t.admin_time) + SUM(t.new_business_time)) / SUM(t.available_time) * 100 AS utilization_percentage
        FROM Timesheet t 
        LEFT JOIN fos_user u ON(u.id = t.user_id) 
        LEFT JOIN company c ON(c.id = u.company_id) 
        GROUP BY u.company_id
        ORDER BY utilization_percentage";

关于php - 如何使用 PHP 从 MySQL 查询中按升序排列值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39418699/

相关文章:

php - 如何使用 php 和 curl 登录 instagram 并获取 sessionid?

php - 在 Laravel 中组织计算代码 : Models or Controllers?

php - 利用 cURL header 问题的 REST-ful 连接

javascript - 在 init() 之后向 TinyMce 添加属性?

php - 从 MySQL 数据库检索项目,但首先使用一些数学规则

mysql - ASP.net 代码返回打开 session 错误

php - 数组在 php 中未按预期工作

Javascript 打印多行变量

html - 使网格元素填充列而不是行

php - PDO::FETCH_OBJ 是否可以将 null 字段的值设置为 null,而不是保留属性未定义?