在 PHP 中的多数组变量中 SQL 中的枢轴

Pivot in SQL in multiarray variable in PHP

我有这个table:

 CREATE TABLE `test_table` (
  `ID` int(11) NOT NULL,
  `EURO` decimal(10,2) DEFAULT NULL,
  `Date` date DEFAULT NULL,
  `Flow` tinytext
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

而数据是这样的:

INSERT INTO `test_table` (`ID`, `EURO`, `Date`, `Flow`) VALUES
(1, '25.34', '2017-05-03', 'Income'),
(2, '48.49', '2017-07-12', 'Income'),
(3, '33.45', '2016-07-02', 'Income'),
(4, '21.23', '2016-02-03', 'Income'),
(5, '14.45', '2016-01-03', 'Outcome'),
(6, '11.45', '2017-03-03', 'Outcome'),
(7, '18.21', '2017-06-03', 'Outcome');

我想得到这个结果:

Flow     2016                        2017
--------------------------------------------------------------
Income   SUM of Income_EURO @ 2016   SUM of Income_EURO @ 2017    
Outcome  SUM of Outcome_EURO @ 2016  SUM of Outcome_EURO @ 2017

我在 SQL 中浏览了一些关于 Pivot 的文章,我尝试了这个查询:

SELECT Flow, 
    SUM(EURO
        CASE(WHILE YEAR(Date) = '2016'
             AS 2016),
    SUM(EURO
        CASE(WHILE YEAR(Date) = '2017'
             AS 2017)
    FROM test_table
GROUP BY Flow;

但我收到此错误消息:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'CASE(WHILE YEAR(Date) = '2016'
             AS 2016),
    SUM(EURO
        CA' at line 3.

我认为语法有问题。 你能告诉我哪里出了问题或建议你的方法吗?

关于多数组变量的第二个问题php

我有这个 php 代码:

<?php

$my_var = array(
  array('ID' => '1','EURO' => '25.34','Date' => '2017-05-03','Flow' => 'Income'),
  array('ID' => '2','EURO' => '48.49','Date' => '2017-07-12','Flow' => 'Income'),
  array('ID' => '3','EURO' => '33.45','Date' => '2016-07-02','Flow' => 'Income'),
  array('ID' => '4','EURO' => '21.23','Date' => '2016-02-03','Flow' => 'Income'),
  array('ID' => '5','EURO' => '14.45','Date' => '2016-01-03','Flow' => 'Outcome'),
  array('ID' => '6','EURO' => '11.45','Date' => '2017-03-03','Flow' => 'Outcome'),
  array('ID' => '7','EURO' => '18.21','Date' => '2017-06-03','Flow' => 'Outcome')
);

foreach(@my_var as @var){
echo $var, '<br />;
}

echo $my_var[0][0].;

?>

在此示例中,两个 echo 都不起作用。 请你帮我语法。 我正在使用 phpmyadmin 版本 4.6.5.2.,php 版本 5.6.30。和 MariaDB SQL 服务器。

谢谢!

  • 第一期 - 您的别名在 SQL 中的位置错误。尝试使用下面的代码

    SELECT Flow, 
    SUM(EURO
            CASE(WHILE YEAR(Date) = '2016') AS 2016,
    SUM(EURO
           CASE(WHILE YEAR(Date) = '2017') AS 2017
    FROM test_table
    GROUP BY Flow;
    
  • 第二期 - 变量不能与@一起使用。 $ 需要改用。

    foreach($my_var as $var){
        print_r($var);
        echo '<br />;
    }
    

以下代码将不起作用,因为您的数组是关联数组。因此,您需要使用命名的数组键来访问数据。

    echo $my_var[0][0].;

例如,如果您想访问第一行的 ID,则将使用以下代码 -

     echo $my_var[0]['ID'];

尝试下面的查询测试。 从

阅读一些关于总和的有用信息
SELECT Flow,
SUM(CASE WHEN year(Date) = 2016 THEN euro ELSE 0 END) As SUM2016, 
SUM(CASE WHEN year(Date) = 2017 THEN euro ELSE 0 END) As SUM2017
FROM test_table GROUP BY Flow

对于第二期,将@替换为$