Как преобразовать таблицу в дерево? - PullRequest
0 голосов
/ 13 октября 2018

Я хочу преобразовать таблицу, полученную при использовании php mysql, как показано на изображениях ниже, в древовидную структуру с флажками, как лучше всего это сделать.

Таблица table.png

до

TreeView tree.png

Вот мой код:

<h4>Select Students</h4>
<table class="table table-bordered" id="example">
 <thead>        
  <tr>
   <th>#</th>
   <th>Class</th>
   <th>Roll/SL No.</th>
   <th>Adm No.</th>
   <th>Student Name</th>
   <th>Father Name</th>
  </tr>
 </thead>
<?php
$result = mysqli_query($conn7,"SELECT * FROM student_info WHERE school_id='$school_id' order by st_class_name ASC, roll_no + 0 ASC, st_name ASC");
while($row = mysqli_fetch_assoc($result)){
?>
   <tr>
      <td><input name="checkbox[]" type="checkbox" id="checkbox[]" value="<?php echo $row['st_id']; ?>"></td>
      <td><?php  echo $row["st_class_name"]; ?></td>
      <td><?php  echo $row["roll_no"]; ?></td>
      <td><?php  echo $row["admission_no"]; ?></td>
      <td><?php  echo $row["st_name"]; ?></td> 
      <td><?php  echo $row["father_name"]; ?></td>
    </tr>
    <?php } ?>
</table>

новый код, который я пробовал -

<?php
$prev_class_id = 1;
$sql_query_stu = mysqli_query($conn7,"SELECT * FROM student_info where school_uni_id='$school_uni_id' order by st_class ASC, roll_no + 0 ASC, st_name ASC"); 
while($display_stu = mysqli_fetch_assoc($sql_query_stu)){
$class_id = $display_stu['st_class'];
$prev_class_id = prev($class_id);
$class_id = $display_stu['st_class_name'];

if($class_id != $prev_class_id){
?>
    <li>
        <i class="fa fa-plus fa-lg"></i>&nbsp;
        <label>
        <input  id="xnode-0-1" data-id="custom-0-1" type="checkbox" value="<?php echo "$class_id"; ?>"/>
        &nbsp;<?php echo $display_stu['st_class_name']; ?>
        </label>
    </li>
<?php }} ?>

results- mytree

class_id и class_name с каждым учеником в моей таблице mysql

1 Ответ

0 голосов
/ 13 октября 2018

Ваша проблема с производительностью связана с вложенными запросами к базе данных.Вы можете сделать это лучше с помощью одного запроса, содержащего JOIN.Я должен угадать на вопрос, потому что вы не показали свои определения таблиц.

SELECT s.sub_cat_id,
       s.sub_cat_name.
       i.roll_no,
       i.st_name,
       i.st_mobile,
       i.st_dob 
  FROM all_services s 
 WHERE s.school_id='$school_id'
  JOIN student_info i ON s.sub_cat_id = i.st_class
 ORDER BY s.sub_cat_name,
          i.roll_no + 0 ASC, 
          st_name ASC;

Тогда ваш PHP-код должен сделать что-то вроде этого:

$previous_class_id = -10000;
$sql_query = mysqli_query($conn7,$the_query_above);
while($display = mysqli_fetch_assoc($sql_query))
{
   $class_id = $display['sub_cat_id'];

   if ($class_id != $previous_class_id) 
   {
      /* html for the checkboxes, etc for each class */
   }

   /* html for the student details */

   if ($class_id != $previous_class_id) 
   {
      $previous_class_id = $class_id;
      /* html for the ends of lists of students  </ul> </li> and the like */
   }
}

Логика о $previous_class_idпозволяет разбить рендеринг вашего результата от класса к классу.в некоторых языках (например, PL/1, посмотрите -) есть

    ON CHANGE $class_id { do something }

, но в php вы должны его подделать.

Для дальнейшего использования: трудно было угадатьтвой вопрос, какова была твоя настоящая проблема.Определенно стоит потратить время на то, чтобы сформулировать вопросы более точно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...