3

i have two tables one item table and customer table: enter image description here

in the table you can see the second item item id 1002 have two entries.and i want to add colspan to that item for column 1 and 3.

enter image description here

 <table>
  <tr>
    <th>Item ID</th>
    <th>Item Color</th>
    <th>Customer</th>
  </tr>
<?php
$sql = mysqi_query($con,"select * from item_table");
while($row = mysqli_fetch_array($sql)){
  ?>

<tr>
    <td><?=$row['item_id'];?></td>
    <td><?=$row['item_color'];?></td>
    <td>
        <select>
        <?php
        $sql_cust = mysqli_query($con,"select * from customer_tbl");
        while($row_cust = mysqli_fetch_array()){
        if($row['customer_id'] == $row_cust['customer_id']){
            echo "<option selected='selected' >".$row['customer_name']."</option>";
        }else{
            echo "<option>".$row['customer_name']."</option>";
        }

        <?php
        }
        ?>
        </select>
    </td>
  </tr>


<?php
}
?>
</table>

But it print in normal way, i have no idea how to add rowspan in loop..please suggest some logic to solve its appreciated.

enter image description here

2 Answers 2

2

You can try it this way:

First, add a counter to your query that will indicate how many entries has a given item.

$sql_cust = mysqli_query($con,
"SELECT *, (SELECT COUNT(*) FROM item_table as it 
 WHERE it.item_id = item_table.item_id) as c
 FROM item_table");

Then, when looping through the items you will set the rowspan to the number of entries the item has. Below is the whole code adjusted.

<?php
$sql = mysqi_query($con,
    "SELECT *, (SELECT COUNT(*) FROM item_table as it 
     WHERE it.item_id = item_table.item_id) as entry_count
     FROM item_table");
$buffer = [];
while($row = mysqli_fetch_array($sql)){
    if(!isset($buffer[$row[$item_id]])) {
        $buffer[$row[$item_id]] = 1;
    }
?>
<tr>
    <?php if(!isset($buffer[$row[$item_id]])) {?>
    <td rowspan="<?=$row['entry_count']?>"><?=$row['item_id'];?></td>
    <?php }?>
    <td><?=$row['item_color'];?></td>
    <?php if(!isset($buffer[$row[$item_id]])) {?>
    <td rowspan="<?=$row['entry_count']?>">
        <select>
        <?php
        $sql_cust = mysqli_query($con,"select * from customer_tbl");
        while($row_cust = mysqli_fetch_array()){
        if($row['customer_id'] == $row_cust['customer_id']){
            echo "<option selected='selected' >".$row['customer_name']."</option>";
        }else{
            echo "<option>".$row['customer_name']."</option>";
        }

        <?php
        }
        ?>
        </select>
    </td>
    <?php }?>
  </tr>


<?php
}
?>

Note that I added a buffer where I set which item was already displayed. That array is used so you only open one td with the wanted rowspan, instead of doing it on every iteration.

Sign up to request clarification or add additional context in comments.

Comments

0

i have a simple idea

give TD a ID like

<td id="dynamically-Generate"> (you need to verify that TD id need to be equal in .rowSpan ="here" inside script  )

and set this TD if dynamically-Generate is greater than 1 then don't show

and again if dynamically-Generate is greater than 1 then then use this script

<script>
document.getElementById("dynamically-Generate").rowSpan = "dynamically-Generate";
</script>

use script inside loop and both dynamically-Generate need to be same inside everyloop and change after each loop

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.