Php 仅获取每个子级的第一个父级
我正在尝试按顺序获取每个子元素的直接父元素(如果存在也不是父元素),到目前为止,我已尝试此函数:Php 仅获取每个子级的第一个父级,php,arrays,Php,Arrays,我正在尝试按顺序获取每个子元素的直接父元素(如果存在也不是父元素),到目前为止,我已尝试此函数: $child_id = 15; $query = "SELECT * FROM family WHERE parent_id < $child_id ORDER By parent_id DESC LIMIT 0,7"; $res = mysql_query($query); while($obj = mysql_fetch_assoc($res)) { $resu
$child_id = 15;
$query = "SELECT * FROM family WHERE parent_id < $child_id ORDER By parent_id DESC LIMIT 0,7";
$res = mysql_query($query);
while($obj = mysql_fetch_assoc($res))
{
$results[] = $obj;
}
$fetchedResults = fetchParentsById($results, $child_id);
function fetchParentsById($results, $id, $parentfound = false, $parents= array())
{
foreach($results as $row)
{
if((!$parentfound && $row['parent_id'] == $id) || $row['child_id'] == $id && $row['parent_id'] > 0)
{
$rowdata = array();
foreach($row as $k => $v)
{
$rowdata[$k] = $v;
}
$parents[] = $rowdata;
if($row['child_id'] == $id)
{
$parents= array_merge($parents, fetchParentsById($results, $row['parent_id'], true));
}
}
}
return $parents;
}
我想看看闭包集 阅读幻灯片48,了解处理父/子数据的几种方法
您需要重新构造数据—是否值得,取决于您期望的查询量。首先,我认为您的表结构很古怪。直到我意识到这是一个交叉表,id不是父id或子id所指的 假设每个孩子只有一位家长,我建议您简化表格的结构:
| id | parent_id |
并对父项id使用NULL表示id没有父项。问题很简单
SELECT * FROM family WHERE parent_id = NULL
或者,如果数据具有固定的id,该id可能会出现在数据中,也可能不会出现在数据中,请使用以下查询:
SELECT * FROM family WHERE parent_id <> (SELECT id FROM family GROUP BY id)
查找表中未列为id但假定数据不完整的父项id。。除非您不必信任您的数据,否则不应该是这样。您能提供表结构的概要吗?只有三列id、父id、子id。。直接父母只需一个查询就可以作为。。。从族中选择*其中child\u id=$child\u id。。。然后使用每行父项Id从其他表中附加数据。。我不明白为什么你需要这样的PHP函数来检测它们?mysql不应该被使用-请用谷歌搜索手册。不推荐使用的函数实际上我想让直系父代的数目有限,而不是超过这个数目,所以,我不得不使用这个函数。。。这可能不是个好主意。。这就是为什么我要求一个更好的解决方案,如果除此之外,以实现预期的结果…谢谢你的答复,是的,我认为这是必要的!谢谢你的建议是的,看来可以了!
SELECT * FROM family WHERE parent_id <> (SELECT id FROM family GROUP BY id)