目前,我有一个mysql db表,其结构如下所示($ sql执行的表。)。我正在运行php函数(当前代码:),该函数会生成一个数组,并输出到html中。
当前结果:每个模型代码基于$ location,$ age1和$ age2的输入一行。
+----+-----+-----------+----------+----+-------------+-----------+
| Yr | Mdl | Mdl Code | Mdl Line | Ct | Total Gross | Avg Gross |
+----+-----+-----------+----------+----+-------------+-----------+
|2017| MDX | YD7H7HKNW | AWDADV | 3 | $ 5,324.54 |$ 1,774.85 |
|2017| RDX | ZD7H8HKNW | ADV | 1 | $ 2,324.54 |$ 2,324.54 |
+----+-----+-----------+----------+----+-------------+-----------+
我需要为每个模型代码生成多个行,并使用年龄段为1-30、31-60、61-90和> = 91的输出。
+-------+----+-----+-----------+----------+----+-------------+-----------+
| Age B | Yr | Mdl | Mdl Code | Mdl Line | Ct | Total Gross | Avg Gross |
+-------+----+-----+-----------+----------+----+-------------+-----------+
|1 - 30 |2017| MDX | YD7H7HKNW | AWDADV | 3 | $ 6,324.54 |$ 2,108.18 |
|31 -60 |2017| MDX | YD7H7HKNW | AWDADV | 2 | $ 3,324.54 |$ 1,662.27 |
+-------+----+-----+-----------+----------+----+-------------+-----------+
我不确定如何执行此操作,我们将不胜感激。
当前代码:
function ageBucket($location, $age1, $age2){
global $con;
$ageBucket = array();
foreach (modelCodeList($location) as $mc) {
$sql = "SELECT `Model Code`, `Year`, `Model`, `Model Line`, COUNT(`Model Code`) AS 'Count' , SUM(`GROSS`) AS 'Total Gross', AVG(`GROSS`) AS 'Avg Gross' FROM `inv_current` WHERE `Location` = '$location' AND `Model Code`= '$mc' AND `Age` BETWEEN '$age1' AND '$age2' GROUP BY `Age` BETWEEN '$age1' AND '$age2'";
$result = mysqli_query($con, $sql);
while ($row = mysqli_fetch_assoc($result)) {
$ageBucket[] = $row;
}
}
usort($ageBucket, function ($a, $b) {
if($b['Avg Gross'] == $a['Avg Gross']) return 0;
return $b['Avg Gross'] < $a['Avg Gross'] ? -1 : 1;
});
return $ageBucket;
}
$ sql执行的表。
+----------+------------+-----+------+---------+------------+-------+
| Location | Model Code | Age | Year | Model | Model Line | GROSS |
+----------+------------+-----+------+---------+------------+-------+
| 3 | TB3H3HJNW | 241 | 2017 | RDX | FWD | 328 |
| 3 | KC1F9HKNW | 225 | 2017 | RLX | ADV | -1181 |
| 3 | DE2F7HKNW | 225 | 2017 | ILX | TECH | 896 |
| 3 | NC1B0HEW | 205 | 2017 | NSX | | 734 |
| 8 | YD3H8HKNW | 178 | 2017 | MDX | ADV | 24 |
| 8 | DE2F7HKNW | 178 | 2017 | ILX | TECH | -724 |
| 8 | DE2F8HJW | 171 | 2017 | ILX | PREMAS | -381 |
| 8 | YD3H5HKNW | 171 | 2017 | MDX | TECH | -213 |
| 3 | YD3H5HKNW | 169 | 2017 | MDX | TECH | -776 |
| 3 | YD3H5HKNW | 169 | 2017 | MDX | TECH | 244 |
| 3 | YD4H5HKNW | 163 | 2017 | MDX | 4TECH | -914 |
| 3 | YD3H5HKNW | 163 | 2017 | MDX | TECH | 70 |
| 8 | YD4H5HKNW | 163 | 2017 | MDX | 4TECH | -1165 |
| 8 | DE2F7HKNW | 157 | 2017 | ILX | | -1107 |
| 8 | NC1B0HEW | 156 | 2017 | NSX | | -863 |
| 8 | DE2F8HJW | 156 | 2017 | ILX | PREMAS | -561 |
| 3 | TB3H5HKNW | 156 | 2017 | RDX | TECH | 139 |
| 3 | YD3H5HKNW | 146 | 2017 | MDX | TECH | 8 |
| 3 | YD3H8HKNW | 143 | 2017 | MDX | ADV | 5 |
| 3 | DE2F7HKNW | 140 | 2017 | ILX | TECH | 491 |
| 8 | YD3H5HKNW | 140 | 2017 | MDX | TECH | -230 |
| 8 | YD3H5HKNW | 140 | 2017 | MDX | TECH | -764 |
| 8 | YD4H5HKNW | 134 | 2017 | MDX | 4TECH | 113 |
| 8 | DE2F7HJNW | 134 | 2017 | ILX | PREM | 755 |
| 3 | TB3H7HKNW | 129 | 2017 | RDX | ADV | -21 |
| 3 | TB3H3HJNW | 127 | 2017 | RDX | | 905 |
| 3 | TB3H3HJNW | 127 | 2017 | RDX | | -664 |
| 3 | TB3H3HJNW | 127 | 2017 | RDX | | -112 |
| 8 | DE2F3HJW | 121 | 2017 | ILX | | 170 |
| 8 | DE2F7HKNW | 120 | 2017 | ILX | TECH | -412 |
| 8 | YD3H5HKNW | 120 | 2017 | MDX | TECH | 341 |
| 8 | YD3H5HKNW | 120 | 2017 | MDX | TECH | -1026 |
| 3 | YD3H5HKNW | 120 | 2017 | MDX | TECH | 653 |
| 3 | YD3H5HKNW | 119 | 2017 | MDX | TECH | 279 |
| 3 | DE2F8HJW | 119 | 2017 | ILX | PREMAS | -207 |
| 3 | YD3H3HJNW | 118 | 2017 | MDX | | -662 |
| 8 | YD3H3HJNW | 113 | 2017 | MDX | | 178 |
| 8 | DE2F7HJNW | 111 | 2017 | ILX | PREM | 701 |
| 8 | YD3H5HKNW | 111 | 2017 | MDX | TECH | -1034 |
| 8 | YD4H5HKNW | 111 | 2017 | MDX | 4TECH | -502 |
| 3 | YD3H3HJNW | 111 | 2017 | MDX | | 16 |
| 3 | YD3H5HKNW | 111 | 2017 | MDX | TECH | 853 |
| 3 | YD3H8HKNW | 108 | 2017 | MDX | | 362 |
| 3 | YD4H8HKNW | 105 | 2017 | MDX | 4ADV | 525 |
| 8 | DE2F7HKNW | 100 | 2017 | ILX | TECH | 149 |
| 8 | DE2F7HKNW | 100 | 2017 | ILX | TECH | 167 |
| 8 | YD3H5HKNW | 97 | 2017 | MDX | TECH | 326 |
| 8 | YD3H5HKNW | 97 | 2017 | MDX | TECH | 586 |
| 3 | YD3H5HKNW | 97 | 2017 | MDX | TECH | -118 |
| 3 | DE2F7HJNW | 94 | 2017 | ILX | PREM | -305 |
| 3 | DE2F7HJNW | 93 | 2017 | ILX | PREM | -609 |
| 3 | YD3H8HKNW | 87 | 2017 | MDX | | -263 |
| 8 | TB3H3HJNW | 86 | 2017 | RDX | | 20 |
| 8 | YD4H8HKNW | 79 | 2017 | MDX | 4ADV | 4 |
| 8 | DE2F3HJW | 79 | 2017 | ILX | | 265 |
| 8 | TB3H5HKNW | 79 | 2017 | RDX | TECH | -470 |
| 3 | UB1F3JJW | 78 | 2018 | TLX 2.4 | TLX2.4 | -1161 |
| 3 | UB1F5JKNW | 78 | 2018 | TLX | TECH 2.4 | -1073 |
| 3 | UB2F5JKNW | 78 | 2018 | TLX | TECH | -141 |
| 3 | UB1F5JKNW | 78 | 2018 | TLX | TECH 2.4 | 789 |
| 8 | UB2F5JKNW | 78 | 2018 | TLX | TECH | 296 |
| 8 | UB1F3JJW | 78 | 2018 | TLX 2.4 | TLX 2.4 | -10 |
| 8 | UB2F5JKNW | 78 | 2018 | TLX | TECH | 871 |
| 8 | YD3H5HKNW | 78 | 2017 | MDX | | -1170 |
| 3 | YD3H5HKNW | 76 | 2017 | MDX | TECH | -627 |
| 3 | UB1F5JKNW | 76 | 2018 | TLX | TECH 2.4 | -711 |
| 3 | UB2F6JKNW | 76 | 2018 | TLX | A-SPEC | -1100 |
| 3 | YD3H5HKNW | 72 | 2017 | MDX | TECH | -529 |
| 8 | YD4H5HKNW | 72 | 2017 | MDX | 4TECH | -254 |
| 8 | UB2F3JJW | 72 | 2018 | TLX | | 632 |
| 8 | UB2F6JKNW | 72 | 2018 | TLX | A-SPEC | -801 |
| 8 | UB1F3JJW | 72 | 2018 | TLX 2.4 | TLX 2.4 | -1165 |
| 3 | UB2F5JKNW | 72 | 2018 | TLX | TECH | -482 |
| 3 | DE2F7HKNW | 70 | 2017 | ILX | TECH | 421 |
| 3 | UB2F5JKNW | 70 | 2018 | TLX | TECH | 288 |
| 3 | UB1F5JKNW | 70 | 2018 | TLX | TECH 2.4 | -144 |
| 8 | YD7H7HKNW | 68 | 2017 | MDX | | -678 |
| 8 | DE2F7HKNW | 66 | 2017 | ILX | | -993 |
| 8 | YD4H9HKNW | 64 | 2017 | MDX | 4ADVENT | -934 |
| 8 | UB2F5JKNW | 64 | 2018 | TLX | TECH V6 | 298 |
| 3 | UB1F3JJW | 64 | 2018 | TLX 2.4 | TLX 2.4 | -609 |
| 3 | UB1F5JKNW | 64 | 2018 | TLX | TECH 2.4 | 484 |
| 3 | UB1F5JKNW | 64 | 2018 | TLX | TECH 2.4 | 570 |
| 3 | TB3H5JKNW | 64 | 2018 | RDX | TECH | 675 |
| 8 | TB3H7JKNW | 64 | 2018 | RDX | ADV | 25 |
| 8 | UB2F5JKNW | 64 | 2018 | TLX | TECH | -853 |
| 8 | YD3H8HKNW | 64 | 2017 | MDX | | -593 |
| 8 | DE2F3HJW | 62 | 2017 | ILX | | -16 |
| 3 | YD3H5HKNW | 58 | 2017 | MDX | TECH | 252 |
| 3 | YD4H8HKNW | 58 | 2017 | MDX | 4ADV | 977 |
| 3 | YD3H3HJNW | 58 | 2017 | MDX | | -50 |
| 3 | UB1F3JJW | 58 | 2018 | TLX 2.4 | TLX 2.4 | 848 |
| 8 | UB1F5JKNW | 58 | 2018 | TLX | TECH 2.4 | 79 |
| 8 | TB3H7JKNW | 58 | 2018 | RDX | ADV | -299 |
| 8 | UB2F5JKNW | 58 | 2018 | TLX | TECH | 708 |
| 8 | UB2F5JKNW | 58 | 2018 | TLX | TECH | -813 |
| 3 | TB4H3JJNW | 58 | 2018 | RDX | 4RDX | -370 |
| 3 | YD3H5HKNW | 56 | 2017 | MDX | TECH | -824 |
| 3 | YD3H3HJNW | 56 | 2017 | MDX | | 462 |
| 3 | UB2F5JKNW | 56 | 2018 | TLX | TECH | -676 |
| 8 | TB3H7JKNW | 56 | 2018 | RDX | ADV | 610 |
| 8 | TB3H7JKNW | 56 | 2018 | RDX | ADV | -556 |
| 8 | TB3H5JKNW | 56 | 2018 | RDX | TECH | -1058 |
| 8 | TB3H3JJNW | 56 | 2018 | RDX | | -192 |
| 3 | TB3H7JKNW | 56 | 2018 | RDX | ADV | -96 |
| 3 | YD4H5HKNW | 55 | 2017 | MDX | 4TECH | -842 |
| 3 | UB1F3JJW | 55 | 2018 | TLX 2.4 | TLX 2.4 | 948 |
| 3 | TB3H7JKNW | 55 | 2018 | RDX | ADV | 484 |
| 8 | YD3H5HKNW | 51 | 2017 | MDX | TECH | 31 |
| 8 | YD3H5HKNW | 51 | 2017 | MDX | TECH | 694 |
| 8 | UB2F5JKNW | 51 | 2018 | TLX | TECH | 352 |
| 8 | UB2F5JKNW | 51 | 2018 | TLX | TECH | -260 |
| 3 | UB1F3JJW | 51 | 2018 | TLX 2.4 | TLX 2.4 | 454 |
| 3 | UB1F5JKNW | 51 | 2018 | TLX | TECH 2.4 | -245 |
| 8 | UB2F5JKNW | 1 | 2018 | TLX | TECH | 722 |
+----------+------------+-----+------+---------+------------+-------+
Jamaima姨妈感谢您上面的sql语句。当我对我的数据库运行它时,group
返回的null的用户定义变量如此处所示。
因此,Age
在SELECT中,我将上限(/ 30)从GROUP BY移到了UDV。
SELECT (@c:=ceiling(`Age`/30)) as `group`, `Model Code`, `Year`, `Model`, `Model Line`, COUNT(`Model Code`) AS 'Count' , SUM(`GROSS`) AS 'Total Gross', AVG(`GROSS`) AS 'Avg Gross' FROM `inv_current` WHERE `Location` = 30 AND `Model Code`= 'CC15706' group by `group`
这是此sql语句的结果。
有了这个成功的sql结果,我发现我仍然需要通过将第一次尝试中使用的mysqli_fetch_assoc()更改为mysqli_multi_query()来修改PHP函数,如下所示。
关于multi_query的重要说明,我发现的许多在线文档都错误地使mysqli_free_result()在mysqli_free_result($ connection)而不是mysqli_free_result($ result)上工作。此错误产生以下参数错误。
Warning: mysqli_free_result() expects parameter 1 to be mysqli_result
直到我回到PHP手册,我才意识到该错误。该手册指出:“ mysqli_free_result-释放与结果关联的内存”。
无论如何,这是几个小时反复试验的结果。大部分是由于我需要学习更多有关编程的知识。没有Jamamia姨妈和其他花时间在这里和其他地方发布的人的帮助,我无法获得想要的输出。我希望其他人会发现此片段有用。
function ageBuckets($location, $model_code){
global $con;
$ageBuckets = array();
// foreach (modelCodeList($location) as $mc) {
$sql = "SELECT (@c:=ceiling(`Age`/30)) as `Age Bucket`, `Model Code`, `Year`, `Model`, `Model Line`, COUNT(`Model Code`) AS 'Count' , SUM(`GROSS`) AS 'Total Gross', AVG(`GROSS`) AS 'Avg Gross' FROM `inv_current` WHERE `Location` = '$location' AND `Model Code`= '$model_code' group by `Year`, `Age Bucket` ";
if (mysqli_multi_query($con, $sql)) {
do {
if($result = mysqli_store_result($con)) {
while ($row = mysqli_fetch_assoc($result)) {
$ageBuckets[] = $row;
}
mysqli_free_result($result);
}
} while(mysqli_more_results($con) && mysqli_next_result($con));
}
// }
return $ageBuckets;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句