У меня есть таблица под названием People
:
id | name |parent_id ---+------+--------- 1 | John | 0 2 | Jane | 1 3 | James| 1 4 | Jack | 0 5 | Jim | 4 6 | Jenny| 4
Итак, Джон является родителем Джейн и Джеймса. Дерево идет так.
John -Jane -James Jack -Jim -Jenny
Я хочу создать таблицу, которая кажется
<table border="1"> <tr> <th colspan="2">John</th> </tr> <tr> <td>-</td><td>Jane</td> </tr> <tr> <td>-</td><td>James</td> </tr> <tr> <th colspan="2">Jack</th> </tr> <tr> <td>-</td><td>Jim</td> </tr> <tr> <td>-</td><td>Jenny</td> </tr> <table>
Для этого я использую два запроса sql. Вот псевдокод:
<?php $firstQuery = 'SELECT id, name FROM People WHERE parent_id = 0'; start creating the table while ($rowP = $result_parent->fetch()) { //get the child rows using the second query in the loop: $secondQuery = 'SELECT id, name FROM People WHERE parent_id = $rowP["id"]'; start creating table rows for child items. while ($rowC = $result_child->fetch()) { add names into the table belonging the current parent person } } ?>
Поэтому проблема здесь поднимается.
Это очень плохой подход в отношении производительности. Каков правильный путь.
Когда я пытаюсь использовать идентификатор родительского лица в качестве параметра для запроса дочерних людей, я получаю сообщение об ошибке в функции bind_param()
.
Это можно сделать только с одним SQL-запросом с помощью операции JOIN
. Но я не знаю, как это сделать.