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,而是使用了按月分组(事务处理日期)