如何通过 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。仅将此方法应用于单个用户或小用户集 - 该函数分别独立地为每个输出行执行整个迭代选择过程。并避免数据循环!
我有这个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。仅将此方法应用于单个用户或小用户集 - 该函数分别独立地为每个输出行执行整个迭代选择过程。并避免数据循环!