如何通过 Child ID 和 MySql 查询或 php 获得第一个 Parent?

How To Get First Parent By Child ID With MySql Query Or php?

我有这个table:

id name parent_id
1 mike 0
2 jeff 0
3 bill 2
4 sara 1
5 sam 4
6 shai 5

我想通过发送 id 或 parent_id :

找到第一个 parent name,id

例如:

如果我发送 6 个 id(shai) 我想显示第一个 Parent 这个名字是 mike(id:1) 但我的查询只显示前一个 parent 并且当我发送 6作为 id 它只显示 sam(id:5)。 如何通过 SQL 查询或 Php 代码首先找到 Parent?

这是我的代码:

SELECT child.id, child.name, child.parent_id, parent.name as ParentName FROM test child JOIN test parent ON child.parent_id = parent.id WHERE child.id=6;
CREATE TABLE test (id INT, name VARCHAR(255), parent_id INT);
INSERT INTO test VALUES
(1,   'mike', 0),
(2,   'jeff', 0),
(3,   'bill', 2),
(4,   'sara', 1),
(5,   'sam',  4),
(6,   'shai', 5);
SELECT * FROM test;
id name parent_id
1 mike 0
2 jeff 0
3 bill 2
4 sara 1
5 sam 4
6 shai 5
CREATE FUNCTION get_most_parent (id INT)
RETURNS CHAR(255) 
BEGIN
DECLARE parent_name VARCHAR(255);
    REPEAT
        SELECT name, parent_id 
        INTO parent_name, id
        FROM test
        WHERE test.id = id;
    UNTIL NOT id END REPEAT;
RETURN parent_name;
END
SELECT test.*, get_most_parent(id) TopParentName 
FROM test
WHERE id IN (3, 6);
id name parent_id TopParentName
3 bill 2 jeff
6 shai 5 mike

db<>fiddle here

PS。仅将此方法应用于单个用户或小用户集 - 该函数分别独立地为每个输出行执行整个迭代选择过程。并避免数据循环!