Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.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
Javascript 基于关键字mysql的total的PHP表rowspan_Javascript_Php_Html_Mysql - Fatal编程技术网

Javascript 基于关键字mysql的total的PHP表rowspan

Javascript 基于关键字mysql的total的PHP表rowspan,javascript,php,html,mysql,Javascript,Php,Html,Mysql,我有这张桌子: 表中的数据是mysql查询的结果。每个项目共有8节课。该表将显示仅具有数量的每个项目及其类。如果一个类中的项目数量为0,则该类将不会显示。(此解释仅用于您的理解。)到目前为止,我所了解的内容如下: |--------------|------------|----------|------------| | Item Name | Item Class | Quantity | Total | |--------------|----

我有这张桌子: 表中的数据是mysql查询的结果。每个项目共有8节课。该表将显示仅具有数量的每个项目及其类。如果一个类中的项目数量为0,则该类将不会显示。(此解释仅用于您的理解。)到目前为止,我所了解的内容如下:

     |--------------|------------|----------|------------|
     |  Item Name   | Item Class | Quantity |    Total   |
     |--------------|------------|----------|------------|
     |              |     A      |    10    |
     |              |------------|----------|
     | Upper Bearing|     B      |     5    |
     |              |------------|----------|------------|
     |              |     C      |     4    |     19     |
     |--------------|------------|----------|------------|
     |              |     A      |     8    |            
     | Lower Bearing|------------|----------|------------|
     |              |     D      |     2    |     10     |
     |--------------|------------|----------|------------|
     |              |     B      |     2    |          
     |              |------------|----------|
     |     Vane     |     D      |    11    |
     |              |------------|----------|------------|
     |              |     E      |     2    |     15     |
     |--------------|------------|----------|------------|
     |--------------|------------|----------|------------|
     |  Item Name   | Item Class | Quantity |    Total   |
     |--------------|------------|----------|------------|
     |              |     A      |    10    |            |
     |              |------------|----------|            |
     | Upper Bearing|     B      |     5    |     19     |
     |              |------------|----------|            |
     |              |     C      |     4    |            |
     |--------------|------------|----------|------------|
     |              |     A      |     8    |            |
     | Lower Bearing|------------|----------|     10     |
     |              |     D      |     2    |            |
     |--------------|------------|----------|------------|
     |              |     B      |     2    |            |
     |              |------------|----------|            |
     |     Vane     |     D      |    11    |     15     |
     |              |------------|----------|            |
     |              |     E      |     2    |            |
     |--------------|------------|----------|------------|
总计列是每个项目所有数量的总和。 例如,上轴承,总计=数量(A)+数量(B)+数量(C)=10+5+4=19。 请注意,每个类的数量都是一些计算的结果,而不是直接从数据库中选择的

我想做的是在
中划行总计,以便它像Item Name那样填充整行

预期输出应如下所示:

     |--------------|------------|----------|------------|
     |  Item Name   | Item Class | Quantity |    Total   |
     |--------------|------------|----------|------------|
     |              |     A      |    10    |
     |              |------------|----------|
     | Upper Bearing|     B      |     5    |
     |              |------------|----------|------------|
     |              |     C      |     4    |     19     |
     |--------------|------------|----------|------------|
     |              |     A      |     8    |            
     | Lower Bearing|------------|----------|------------|
     |              |     D      |     2    |     10     |
     |--------------|------------|----------|------------|
     |              |     B      |     2    |          
     |              |------------|----------|
     |     Vane     |     D      |    11    |
     |              |------------|----------|------------|
     |              |     E      |     2    |     15     |
     |--------------|------------|----------|------------|
     |--------------|------------|----------|------------|
     |  Item Name   | Item Class | Quantity |    Total   |
     |--------------|------------|----------|------------|
     |              |     A      |    10    |            |
     |              |------------|----------|            |
     | Upper Bearing|     B      |     5    |     19     |
     |              |------------|----------|            |
     |              |     C      |     4    |            |
     |--------------|------------|----------|------------|
     |              |     A      |     8    |            |
     | Lower Bearing|------------|----------|     10     |
     |              |     D      |     2    |            |
     |--------------|------------|----------|------------|
     |              |     B      |     2    |            |
     |              |------------|----------|            |
     |     Vane     |     D      |    11    |     15     |
     |              |------------|----------|            |
     |              |     E      |     2    |            |
     |--------------|------------|----------|------------|
这是我的代码:

<table>
  <tr>
    <td>Item Name</td>
    <td>Item Class</td>
    <td>Item Quantity</td>
    <td>Total</td>
  </tr>

<?php
$result=mysql_query("SELECT * FROM tblitem INNER JOIN itemloc ON tblitem.itemId=itemloc.itemId INNER JOIN refitemclass ON tblitem.itemClassId=refitemclass.itemClassId");

$classqty=array();
while($row = mysql_fetch_array($result)){
    $item=$row['itemNm'];
    $class=$row['itemClassName'];

    if(!isset($classqty[$item][$class]))
    {
    $classqty[$item][$class] = 0;
    }
    if(is_null($row['itemLocCheckOut'])){
        $classqty[$item][$class] += $row['itemLocQty'];
    }
    else{
        $classqty[$item][$class] -= $row['itemLocQty'];
    }
}

$sum=array();
    foreach($classqty as $k1=>$v1){
        foreach($v1 as $k2=>$v2){
            if(!isset($sum[$k1])){
            $sum[$k1] = $v2;
            }
            else
            {
            $sum[$k1] += $v2;  /*calculation for total*/
            }
?>



<tr id="table2">

<td><?php echo $k1;?></td> /*output the item name*/
<td><?php echo $k2;?></td> /*output the item class*/
<td><?php echo $v2;?></td> /*output the quantity for item class*/
<?php
}
?>
<td><?php echo $sum[$k1];?></td> /*output the total*/
</tr>
<?php
}
?>

</table>

项目名称
项目类别
项目数量
全部的
/*输出项目名称*/
/*输出项目类*/
/*输出item类的数量*/
/*输出总数*/
下面是将rowspan作为项目名称的javascript

<script>
    $(document).ready(function() {
       var span = 1;
       var prevTD = "";
       var prevTDVal = "";
       $("#table2 td:first-child").each(function() { //for each first td in every tr
          var $this = $(this);
          if ($this.text() == prevTDVal) { // check value of previous td text
             span++;
             if (prevTD != "") {
                prevTD.attr("rowspan", span); // add attribute to previous td
                $this.remove(); // remove current td
             }
          } else {
             prevTD     = $this; // store current td 
             prevTDVal  = $this.text();
             span       = 1;
          }
       });
    });
    </script>

$(文档).ready(函数(){
var span=1;
var prevTD=“”;
var prevTDVal=“”;
$(“#table2 td:first child”).each(function(){//用于每个tr中的每个第一个td
var$this=$(this);
如果($this.text()==prevTDVal){//检查上一个td文本的值
span++;
如果(prevTD!=“”){
attr(“rowspan”,span);//将属性添加到上一个td
$this.remove();//删除当前td
}
}否则{
prevTD=$this;//存储当前td
prevTDVal=$this.text();
span=1;
}
});
});
我尝试过类似于
的方法,只需将
$(“#table2 td:first child”)
更改为
$(“#table2 td:last child”)
就可以为项目名称创建相同的javascript,但这些都不起作用。总计仍与item类的最后一行在同一行中


p/S:请不要建议我对计算部分进行任何更改,因为计算工作正常,结果都是正确的。我的问题只是总量的输出结构。

使用您当前的javascript代码,您只需在为
td:first child设置
rowspan
之后添加以下两行即可-

prevTD.siblings().last().attr("rowspan", span).text($this.siblings().last().text());
$this.siblings().last().remove();
所以你的代码现在看起来像-

<script>
    $(document).ready(function() {
       var span = 1;
       var prevTD = "";
       var prevTDVal = "";
       $("#table2 td:first-child").each(function() { //for each first td in every tr
          var $this = $(this);
          if ($this.text() == prevTDVal) { // check value of previous td text
             span++;
             if (prevTD != "") {
                prevTD.attr("rowspan", span); // add attribute to previous td
                prevTD.siblings().last().attr("rowspan", span).text($this.siblings().last().text()); // add rowspan attribute to previous td's last sibling, and set the text
                $this.siblings().last().remove(); // remove the current td's last sibling
                $this.remove(); // remove current td
             }
          } else {
             prevTD     = $this; // store current td 
             prevTDVal  = $this.text();
             span       = 1;
          }
       });
    });
</script>
确保在运行其他代码之前先运行此代码。您的完整代码如下所示-

<script>
$(document).ready(function() {

   var prevTR = 0;
   $("#table2 tr").each(function(index,value) {
       if($(this).children("td:eq(3)").text() != ""){
           $("#table2 tr:eq("+prevTR+")").append($(this).children("td:eq(3)").attr("rowspan", (index+1) - prevTR));
          prevTR = index+1;
       }
       else {
       }
   });

   var span = 1;
   var prevTD = "";
   var prevTDVal = "";

   $("#table2 td:first-child").each(function() { //for each first td in every tr
      var $this = $(this);
      if ($this.text() == prevTDVal) { // check value of previous td text
         span++;
         if (prevTD != "") {
            prevTD.attr("rowspan", span); // add attribute to previous td
            $this.remove(); // remove current td
         }
      } else {
         prevTD     = $this; // store current td 
         prevTDVal  = $this.text();
         span       = 1;
      }
   });
   var preTR = 0;
});
</script>

$(文档).ready(函数(){
var-prevTR=0;
$(“#表2 tr”)。每个(函数(索引、值){
if($(this).children(“td:eq(3)”).text()!=“”){
$(“#表2 tr:eq(+prevTR+))。追加($(this).children($td:eq(3)”).attr($rowspan),(index+1)-prevTR));
prevTR=指数+1;
}
否则{
}
});
var span=1;
var prevTD=“”;
var prevTDVal=“”;
$(“#table2 td:first child”).each(function(){//用于每个tr中的每个第一个td
var$this=$(this);
如果($this.text()==prevTDVal){//检查上一个td文本的值
span++;
如果(prevTD!=“”){
attr(“rowspan”,span);//将属性添加到上一个td
$this.remove();//删除当前td
}
}否则{
prevTD=$this;//存储当前td
prevTDVal=$this.text();
span=1;
}
});
var-preTR=0;
});

更新了

是否需要使用javascript执行此操作?为什么不在
foreach($k1=>v1)循环中使用php进行计算,然后在循环之后构建表。@Sean我的计算没有问题。结果完全正确。我只是想知道如何计算总的行间距。我想你不理解我问题的全部概念,但谢谢你的评论。是的,这需要Javascript。不,我理解[你]问题的全部概念。我只是想知道你是否愿意用一种不需要太多代码,也不需要javascript的方式来完成它。@Sean我希望如此,但我的系统有点复杂。计算部分不需要做任何改变。我相信这需要Javascript来完成行span。您的计算部分看起来很好,我只是想看看您可以在哪里使用它,通过使用它来查找您的
行span
。使用javascript会起作用,但会有一点挑战性,因为您不能使用您为
项目名称
所使用的方法,因为您可能会遇到兄弟
项目名称
具有相同的
总计
,因此会
行跨度
太多的情况。我的javascript编码比我的php编码慢一点,但我可以尝试一下。仍然不起作用。相反,它将最后一个项目名称拖到项目类中,最后一个项目类拖到项目数量中,最后一个项目数量拖到总计中。我认为计算的一部分可能也需要在Javascript中。对不起,显然我没有注意到,在每组的最后一行,而不是每一行,只有合计的
。让我再检查一下。我不想说这些,但什么也没发生(谢谢你的时间和努力。