Php 动态透视MYSQL不完整SQL

Php 动态透视MYSQL不完整SQL,php,mysql,Php,Mysql,我在一个项目上遇到了麻烦,我已经工作了大约5个星期了,我在这个过程中发布了各种stackoverflow帖子,我几乎到了最后一个关口 我在搜索每周总和时遇到了重复数据的问题,但我似乎已经明白了这一点,但现在我的陈述没有完成。 裁判: 这是对数据的篡改。 如您所见,最后一条语句不完整: SELECT title AS `Service`, SUM(CASE WHEN (YEARWEEK(date)) = 201635 THEN AMOUNT else 0 END) AS `201635`, S

我在一个项目上遇到了麻烦,我已经工作了大约5个星期了,我在这个过程中发布了各种stackoverflow帖子,我几乎到了最后一个关口

我在搜索每周总和时遇到了重复数据的问题,但我似乎已经明白了这一点,但现在我的陈述没有完成。 裁判:

这是对数据的篡改。

如您所见,最后一条语句不完整:

SELECT title AS `Service`, SUM(CASE WHEN (YEARWEEK(date)) = 201635 THEN AMOUNT else 0 END) AS `201635`,
SUM(CASE WHEN (YEARWEEK(date)) = 201703 THEN AMOUNT else 0 END) AS `201703`,
SUM(CASE WHEN (YEARWEEK(date)) = 201709 THEN AMOUNT else 0 END) AS `201709`,
SUM(CASE WHEN (YEARWEEK(date)) = 201713 THEN AMOUNT else 0 END) AS `201713`,
SUM(CASE WHEN (YEARWEEK(date)) = 201715 THEN AMOUNT else 0 END) AS `201715`,
SUM(CASE WHEN (YEARWEEK(date)) = 201717 THEN AMOUNT else 0 END) AS `201717`,
SUM(CASE WHEN (YEARWEEK(date)) = 201718 THEN AMOUNT else 0 END) AS `201718`,
SUM(CASE WHEN (YEARWEEK(date)) = 201722 THEN AMOUNT else 0 END) AS `201722`,
SUM(CASE WHEN (YEARWEEK(date)) = 201723 THEN AMOUNT else 0 END) AS `201723`,
SUM(CASE WHEN (YEARWEEK(date)) = 201725 THEN AMOUNT else 0 END) AS `201725`,
SUM(CASE WHEN (YEARWEEK(date)) = 201726 THEN AMOUNT else 0 END) AS `201726`,
SUM(CASE WHEN (YEARWEEK(date)) = 201735 THEN AMOUNT else 0 END) AS `201735`,
SUM(CASE WHEN (YEARWEEK(date)) = 201736 THEN AMOUNT else 0 END) AS `201736`,
SUM(CASE WHEN (YEARWEEK(date)) = 201
from record_offering t1
join setting_service ON t1.service_id = setting_service.id
WHERE t1.`date` BETWEEN ? AND ?
GROUP BY title asc WITH ROLLUP

我尝试过以各种方式转义查询,但要么查询完成,我的数据重复,要么根本无法编译。

GROUP\u CONCAT限制1024字节

使用

SET SESSION group\u concat\u max\u len=@@max\u allowed\u packet


在GROUP CONCAT查询之前。

GROUP CONCAT有1024字节的限制

使用

SET SESSION group\u concat\u max\u len=@@max\u allowed\u packet


在进行分组查询之前。

按照我的想法,这(或类似的东西)就是解决此问题所需的全部sql。其他一切都可以而且应该在表示层中处理

SELECT YEARWEEK(x.date) yw
     , x.title
     , COALESCE(SUM(y.amount),0) total
  FROM setting_service x
  LEFT
  JOIN record_offering y
    ON y.service_id = x.id
 GROUP 
    BY yw
     , x.id;

按照我的想法,这个(或者类似的东西)就是解决这个问题所需要的所有sql。其他一切都可以而且应该在表示层中处理

SELECT YEARWEEK(x.date) yw
     , x.title
     , COALESCE(SUM(y.amount),0) total
  FROM setting_service x
  LEFT
  JOIN record_offering y
    ON y.service_id = x.id
 GROUP 
    BY yw
     , x.id;


认真考虑应用程序代码中的数据显示问题。这将大大简化这个查询。从我的角度来看,您目前的策略完全回到了前台。我最初的尝试只是一个基本的求和和分组查询,然后我使用php进行了转换,但它无法正确地聚合过去每天的数据。然后,我建议试试TimTI,当演示图层代码可用时,这样看不到旋转数据的点。我还有很长的路要走,谢谢你的建议。认真考虑应用程序代码中的数据显示问题。这将大大简化这个查询。从我的角度来看,您目前的策略完全回到了前台。我最初的尝试只是一个基本的求和和分组查询,然后我使用php进行了转换,但它无法正确地聚合过去每天的数据。当时有人建议我尝试使用数据透视,但当演示层代码可用时,我看不到以这种方式透视数据的意义。我还有很长的路要走,谢谢你的建议。对此我一无所知,目前此项目正在共享主机上运行,我相信我需要根访问权限才能正确执行此操作?@Enoch S否您可以在没有超级权限或根访问权限的情况下使用此设置我不知道,目前此项目正在共享主机上运行,我相信我需要根访问权限才能正确执行此操作?@Enoch S No您可以在没有超级权限或根访问权限的情况下使用此设置。我的初始努力正如您所说。这就是我在SA上发布的问题:我认为这看起来是一个更好的方法。唯一的问题是“汇总”——使用一点javascript就可以轻松地完成。这本来可以做到,但问题是它没有正确地聚合数据。这是小提琴。如果你把每天和每天的间隔时间改为+1天,数据是正确的,但在+1周,数据不会累计,因为第一周应该是5天。我的初始努力如你所说。这就是我在SA上发布的问题:我认为这看起来是一个更好的方法。唯一的问题是“汇总”——使用一点javascript就可以轻松地完成。这本来可以做到,但问题是它没有正确地聚合数据。这是小提琴。如果您将AD和T身体间隔改为+1天,则数据是正确的,但在+1周,数据不会聚合,因为第一个应该是5