【发布时间】:2019-05-04 21:25:48
【问题描述】:
我想为我的数据库中的一些统计数据制作一个简单的条形图。更具体地说:这是一个家谱,我想显示每个月的出生频率。我设法创建了 SQL 查询来获取月份列表及其各自的出生人数。现在我想添加一个彩色条,其中最大的数字是 100% 宽度,其他的都是成比例的。
为了计算百分比,我需要从查询结果中得到最大的数字。但是,我不需要显示它。我只需要数字就可以用它来计算条的宽度。
我尝试了使用 MAX() 的不同解决方案,但这些都设置为仅显示 COUNT() 的最大值。如前所述,我想显示完整的结果,并且只需要 MAX() 在内部进行计算。我不需要显示它。
很容易通过按 COUNT() 执行 SELECT() 查询排序并限制到第一个结果来检索数字。由于所需的 MAX() 结果只有一个数字,因此我无法与另一个 SELECT 查询进行 UNION 以获得每月的数字。 第二个问题是要显示的结果显然不是按 COUNT() 排序的,而是按月份排序的。所以此时 MAX() 数字将是第三个结果,尽管当我添加到我的数据库时它可能会改变。
<?php
require_once(ABSPATH . 'wp-settings.php');
$connection = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD);
mysqli_select_db($connection, DB_NAME);
$query = "SELECT
MONTHNAME(birthdatetr) AS Month_of_Birth,
MONTH(birthdatetr) AS number_of_month_of_birth,
COUNT(*) AS Total
FROM
tng_people
WHERE
MONTH(birthdatetr) > 0
GROUP BY
number_of_month_of_birth
ORDER BY
number_of_month_of_birth";
$result = mysqli_query($connection, $query);
$barwidth = floor($Total / $birthmax * 100);
?>
<?php foreach ($result as $row){
echo "{$row['Month_of_Birth']} ({$row['Total']})
<td class=\"bar-holder\"><div style=\"width:{$barwidth}%;\" class=\"bar rightround\"></div></td>";
}
?>
这是我必须显示月份列表的代码。我已将最大变量命名为“birthmax”,只是不知道如何为其赋值。该值应该是“总计”的最大结果。 “条形宽度”是我要显示的彩色条的计算大小。使用代码原样,因此缺少birthmax 的值,会显示条形、月份和数字,但条形是全宽的,表示分配给 barwidth 的值不是数字 (NAN)。
【问题讨论】:
-
您的查询甚至无效,请参阅MySQL Handling of GROUP BY
-
查询本身完美运行,在我的网站上的两个 phpMyAdmin 中......无论如何,它会根据我的需要显示结果。为什么它会无效?我唯一能看到的是我宁愿按 MONTH(birthdaretr) 订购,但这也有效......