簡體   English   中英

不管孩子的身份證號如何,獲取最高父母的身份證號

[英]Get The Topmost Parent's ID, Regardless of The Child's ID

我有一個表(例如名稱為“ page”),其中每一行都是另一行的子級,如下所示(請參見HTML部分):

http://jsfiddle.net/Fuqrb/

我想通過使用孩子的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM