[英]Get The Topmost Parent's ID, Regardless of The Child's ID
我有一個表(例如名稱為“ page”),其中每一行都是另一行的子級,如下所示(請參見HTML部分):
我想通過使用孩子的ID來找到最頂層的父母的ID。 例如,我們獲得一個URL變量作為最底層子代的ID:
http://www.website.com/page.php?p=6
然后我們將URL變量存儲到一個變量中:
$p = $_GET['p'];
要獲得最高的父代ID,我必須多次使用查詢功能。 例如:
if($result = $mysqli->query("SELECT * FROM page WHERE id='$p' LIMIT 1"))
{
while($row = $result->fetch_array())
{
$parent = $row["parent"];
}
}
if($result = $mysqli->query("SELECT * FROM page WHERE id='$parent' LIMIT 1"))
{
while($row = $result->fetch_array())
{
$parent1 = $row["parent"];
}
}
if($result = $mysqli->query("SELECT * FROM page WHERE id='$parent1' LIMIT 1"))
{
while($row = $result->fetch_array())
{
$parent2 = $row["parent"];
}
}
if($result = $mysqli->query("SELECT * FROM page WHERE id='$parent2' LIMIT 1"))
{
while($row = $result->fetch_array())
{
$id = $row["id"];
}
}
這種方法是無效的,因為如果我得到另一個URL變量作為更高/更低級別的另一個孩子的ID,則此方法將無效。
不管孩子的ID如何如何動態獲取最高的父母ID?
DELIMITER $$
CREATE FUNCTION `fnGetRootParent`(
page INT
) RETURNS int(11)
READS SQL DATA
DETERMINISTIC
BEGIN
DECLARE _parent INT;
DECLARE _result INT;
SET _parent = page;
my_loop: LOOP
SELECT
p.id
,p.parent
INTO
_result
,_parent
FROM page p
WHERE id = _parent;
IF (_parent = 0) OR (_parent = _result) THEN
LEAVE my_loop;
END IF;
END LOOP my_loop;
RETURN _result;
END
SELECT fnGetRootParent(213);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.