gpt4 book ai didi

php - 显示每个月的数据

转载 作者:可可西里 更新时间:2023-11-01 07:38:03 25 4
gpt4 key购买 nike

我有一个大约有 40 行的表 - 这是一个小样本:

ID Date         Name      apples1   1284497100    Brian     22   1288126800    Tom       53   1290268800    Kirsten   34   1292274000    Emma      75   1294174800    Sophie    16   1299012300    Lars      3

日期分布在一年左右,我想要一个 PHP 页面显示每个月苹果最多的两个人:

一月:
名字1
名字2

二月:
名字1
名字2

等等

我想知道是否有一种简单的方法可以做到这一点,或者我是否必须每个月创建 12 个不同的 mysql 代码(我假设这会对服务器产生影响 - 对吗?)

最佳答案

最简单的方法:

SELECT
EXTRACT(YEAR_MONTH FROM FROM_UNIXTIME(`Date`)) AS year_mo,
`Name` AS name,
SUM(`Apples`) AS sum_apples
FROM apples_table
GROUP BY 1,2
ORDER BY 1,3 DESC;

您可能应该使用 DATETIME 列来存储日期,但您可以使用 FROM_UNIXTIME() 函数转换值以用于 EXTRACT。查看MySQL date/time functions documentation了解更多信息。

此查询每个月会为您提供超过两行,您将在 PHP 循环中处理这些行,该循环通过跟踪您连续看到同一个月的次数并在必要时丢弃行来读取结果。我认为这是一种比使用 12 个单独的查询更好的方法来处理您的问题。

您的表中只有 40 行,性能不会成为问题,除非您做了一些非常糟糕的事情。

如果您真的想深入研究在一个查询中准确返回所需结果所需的神秘 SQL 语法,请查看 this article .以这种方式处理关系和其他边缘情况会很困惑。


编辑 - 这是 PHP 代码的想法:

$query = mysql_query(<<<SQL
SELECT
EXTRACT(YEAR_MONTH FROM FROM_UNIXTIME(`Date`)) AS year_mo,
`Name` AS name,
SUM(`Apples`) AS sum_apples
FROM apples_table
GROUP BY 1,2
ORDER BY 1,3 DESC;
SQL
) or die(mysql_error());

$last_year_mo = '';
$same_date_count = 0;
while ($row = mysql_fetch_assoc($query)) {
# Only process 2 rows for each date
if ($row['year_mo'] == $last_year_mo) {
if (++$same_date_count >= 2) {
continue;
}
} else {
$last_year_mo = $row['year_mo'];
$same_date_count = 0;
# Spit out some HTML if needed, like a separator
}

# year_mo is a string in the form YYYYMM
$year = substr($row['year_mo'], 0, 4);
$month = date('F', mktime(0, 0, 0, substr($row['year_mo'], 4, 2), 1));

# Spit out some HTML for this row
}

关于php - 显示每个月的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4718340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com