在 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
对于第二期,将@替换为$
我有这个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
对于第二期,将@替换为$