我从数据库中提取内容并使用foreach循环运行它。我拉的每个项目都有一个带有ID的列,以及一个带有PARRENT ID的列(以及其他列)。 首先,我拉出我的PARRENT ID列等于0的所有行,并通过我的foreach循环输出它们,但是对于我得到的每个结果,我想运行一个新查询来检查PARRENT ID等于其ID的行。对于我来到这里的每一个结果,我想一次又一次地做同样的事情,因为它可能会找到许多结果(可能这可能永远存在)。
让我试着想象一下这个
ID = 1, PARRENT ID = 0
ID = 2, PARRENT ID = 0
ID = 3, PARRENT ID = 0
ID = 4, PARRENT ID = 3
ID = 5, PARRENT ID = 3
ID = 6, PARRENT ID = 5
ID = 7, PARRENT ID = 3
ID = 8, PARRENT ID = 3
ID = 9, PARRENT ID = 0
ID = 10, PARRENT ID = 0
ID = 11, PARRENT ID = 10
ID = 12, PARRENT ID = 11
ID = 13, PARRENT ID = 12
ID = 14, PARRENT ID 13
我该怎么做?
答案 0 :(得分:0)
您可以创建一个只返回具有特定父ID的所有行的函数。然后创建一个递归函数,打印出结果集和每个元素的所有子元素。这是一些快速伪代码:
function getRowsForParentId($id){
//build query with "WHERE parent = id", fetch all rows and return them
...
return $rows;
}
function printResults($results, $level = 1){
//loop over every result
foreach($results as $row){
//print an indented representation of that row
echo sprintf("%sid: %s, parent: %s", str_repeat(" ", $level), $row->id, $row->parentId);
//print out all childs one level deeper
printResults(getRowsForParentId($row->id), $level++);
}
}
$allRows = getRowsForParentId(0);//fetch all rows from db where parent = 0
printResults($allRows);
这应该做你想要的。
另外请查看在mysql中存储分层数据,因为这就是你在这里所做的。
What are the options for storing hierarchical data in a relational database?
答案 1 :(得分:0)
我自己想出了一个解决方案,它的工作方式与我想要的一样,但老实说我不知道这是不好的做法,但我对编程很新。
我创建了一个函数,我可以在其中传入一个值。 在此函数中,我选择PARRENT ID等于我的输入值的所有行。 然后我有一个foreach循环,在其中我获得了earch行的ID。 在这个foreach循环中,我传递函数,并将ID作为值传递。
function get_parrents($input) {
$sql = "SELECT * FROM table WHERE parrent_id = '" . $input . "'";
$result = mysqli_query($conn, $sql);
foreach($result as $item) {
$new_item = $item['id'];
get_parrents($new_item);
};
};
$ a = 0;
catch_replies($ a)的