Javascript 基于关键字mysql的total的PHP表rowspan
我有这张桌子: 表中的数据是mysql查询的结果。每个项目共有8节课。该表将显示仅具有数量的每个项目及其类。如果一个类中的项目数量为0,则该类将不会显示。(此解释仅用于您的理解。)到目前为止,我所了解的内容如下:Javascript 基于关键字mysql的total的PHP表rowspan,javascript,php,html,mysql,Javascript,Php,Html,Mysql,我有这张桌子: 表中的数据是mysql查询的结果。每个项目共有8节课。该表将显示仅具有数量的每个项目及其类。如果一个类中的项目数量为0,则该类将不会显示。(此解释仅用于您的理解。)到目前为止,我所了解的内容如下: |--------------|------------|----------|------------| | Item Name | Item Class | Quantity | Total | |--------------|----
|--------------|------------|----------|------------|
| 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中。对不起,显然我没有注意到,在每组的最后一行,而不是每一行,只有合计的
。让我再检查一下。我不想说这些,但什么也没发生(谢谢你的时间和努力。