У меня есть две таблицы: одна таблица товаров и таблица клиентов:
в таблице вы можете увидеть, что второй элемент item 1002 имеет две записи. И я хочу добавить colspan к этому элементу для столбцов 1 и 3.
<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>
Но он печатается обычным способом, я понятия не имею, как добавить rowspan в loop..please предложить некоторую логику, чтобы решить ее оценили.
Вы можете попробовать это так:
Во-первых, добавьте счетчик к вашему запросу, который будет указывать, сколько записей имеет данный элемент.
$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");
Затем, когда вы перебираете элементы, вы устанавливаете rowspan на количество записей, которые имеет элемент. Ниже приведен весь код.
<?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 } ?>
Обратите внимание, что я добавил буфер, в котором я установил, какой элемент уже был отображен. Этот массив используется, поэтому вы открываете только один td с нужным количеством строк, вместо того чтобы делать это на каждой итерации.
У меня есть простая идея
дать TD ID ID
<td id="dynamically-Generate"> (you need to verify that TD id need to be equal in .rowSpan ="here" inside script )
и установите этот TD, если динамически-Generate больше 1, тогда не показывайте
и снова, если динамически-Generate больше 1, тогда используйте этот скрипт
<script> document.getElementById("dynamically-Generate").rowSpan = "dynamically-Generate"; </script>
использовать скрипт внутри цикла и оба динамически – генерировать нужно быть одинаковым внутри каждого окна и изменять после каждого цикла