Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.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 选择前几个月的数据-MySQL_Php_Mysql - Fatal编程技术网

Php 选择前几个月的数据-MySQL

Php 选择前几个月的数据-MySQL,php,mysql,Php,Mysql,我想生成这样的图 我需要这样的数据来生成上面的图表 June - Art 2 June - Commerce 4 June - Maths 4 June - Science 5 May - Art 2 May - Commerce 3 May - Maths 4 May - Science 4 我试过这个问题 SELECT DISTINCT ( MONTHNAME( user_reg ) ), u.sec_name, u.count FROM ( SELECT COUNT( user_s

我想生成这样的图

我需要这样的数据来生成上面的图表

June - Art 2
June - Commerce 4
June - Maths 4
June - Science 5

May - Art 2
May - Commerce 3
May - Maths 4
May - Science 4
我试过这个问题

SELECT DISTINCT (
MONTHNAME( user_reg )
), u.sec_name, u.count
FROM (

SELECT COUNT( user_section ) AS count, sections.sec_name, users.user_reg
FROM users
LEFT JOIN sections ON users.user_section = sections.sec_id
GROUP BY sections.sec_name
) AS u
结果是

用户的表结构


只需使用条件聚合:

SELECT MONTHNAME(u.user_reg), s.sec_name, COUNT(*)
FROM users u JOIN
     sections s
     ON u.user_section = s.sec_id
GROUP BY MONTHNAME(u.user_reg), s.sec_name
ORDER BY MIN(u.user_reg), s.sec_name;
一些注意事项:

  • 您似乎不需要
    左连接
    。如果有些东西不匹配,你就不想让它被计算在内
  • 这引入了表别名作为表名的缩写,使查询更易于读取和写入
  • 这有一个明确的
    ORDER BY
    ,因此结果在图表中的顺序合理

如果我理解了您的问题,您不需要再进行子查询,只需加入表,计算节数,并按节名和月名分组:

SELECT 
  COUNT( u.user_section ) AS count, 
  s.sec_name, 
  u.user_reg,
  MONTHNAME(u.user_reg)
FROM users u
JOIN sections s ON u.user_section = s.sec_id
GROUP BY 
  s.sec_name,
  MONTHNAME(u.user_reg)

谢谢你的回答。您的查询工作正常,符合我的情况。不幸的是,我不能将两个答案都标记为答案。