Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在以下场景中,如何使用SQL查询显示每月结果?_Php_Mysql_Sql_Unix Timestamp - Fatal编程技术网

Php 在以下场景中,如何使用SQL查询显示每月结果?

Php 在以下场景中,如何使用SQL查询显示每月结果?,php,mysql,sql,unix-timestamp,Php,Mysql,Sql,Unix Timestamp,我有一个名为user\u transaction的数据库表,其结构如下: transaction_id mediumint(6) UNSIGNED (PK) transaction_no varchar(55) transaction_cc_avenue_no varchar(55) transaction_card_category varchar(100) transaction_user_id varchar(32) transaction_user_

我有一个名为
user\u transaction
的数据库表,其结构如下:

transaction_id    mediumint(6)   UNSIGNED (PK)
transaction_no    varchar(55)
transaction_cc_avenue_no    varchar(55)
transaction_card_category    varchar(100)
transaction_user_id      varchar(32)
transaction_user_name    varchar(255)
transaction_user_email_id    varchar(255)
transaction_deal_code    varchar(10)
transaction_dc_id    smallint(4)
transaction_amount    float(10,2)
transaction_discount    float(10,2)
transaction_total_amount    float(10,2)
transaction_data_assign    enum('0', '1')
transaction_status    enum('success', 'inprocess', 'fail', 'cancelled')     
transaction_date    bigint(12)
transaction_update_date    bigint(12)
transaction_update_user_id    varchar(32)
我正在使用UNIX时间戳值将日期存储在列
transaction\u date
中。现在,我想显示表中所有交易日期的不同交易状态(即每个日期发生的交易总数、状态为“成功”、“正在处理”、“失败”和“取消”的交易总数)的每月交易数。这些记录应按月分组。为了得到这个结果,我做了很多努力,但没有取得任何成功。以下是我的问题,供您参考:

SELECT COUNT(*) `total count`, SUM(transaction_status = 'success') `success`, SUM(transaction_status = 'inprocess') `inprocess`, SUM(transaction_status = 'fail') `fail`, SUM(transaction_status = 'cancelled') `cancelled` FROM user_transaction GROUP BY FROM_UNIXTIME(transaction_date)

在这方面有人能帮我吗?提前感谢。

如果您只需将交易日期设置为一个日期,将会容易得多。然后可以使用内置函数

例如,你可以

SELECT year(transaction_date), month(transaction_date),
    sum(whatever), ...
FROM user_transaction
GROUP BY YEAR(transaction_date), MONTH(transaction_date)
ORDER BY YEAR(transaction_date), MONTH(transaction_date);
如果您不喜欢更改事务日期的数据类型,那么可以使用FROM_UNIXTIME动态转换它。我不建议这样做,因为它在每个查询中都是一个额外的(不必要的)处理层。尽管如此,这意味着您可以保持模式不变并编写:

SELECT year(FROM_UNIXTIME(transaction_date)), month(FROM_UNIXTIME(transaction_date)),
    sum(whatever), ...
FROM user_transaction
GROUP BY YEAR(FROM_UNIXTIME(transaction_date)), MONTH(FROM_UNIXTIME(transaction_date))
ORDER BY YEAR(FROM_UNIXTIME(transaction_date)), MONTH(FROM_UNIXTIME(transaction_date));

很恶心,不是吗?你最好先做一个“ALTER TABLE CHANGE COLUMN transaction\u date transaction\u date date”,然后你就可以利用易于使用的MySQL函数来计算日期了。

@Eric Wich&@D Mac:我想很好地显示月份号。那么,我应该如何编写查询?我已经更新了我的答案,以显示年份和月份(您需要年份,以便在年度变化中消除月份的歧义)。@Eric Wich:通过使用您的查询,我得到的是日期结果,而不是月份。您是否将transaction_date更改为日期而不是bigint?您是否包含了语句“按月分组(事务处理日期)”?@DMac:No,我没有将事务处理日期数据类型从bigint更改为date,而是使用了按月分组(事务处理日期)