【问题标题】:How To Get First Parent By Child ID With MySql Query Or php?如何使用 MySql 查询或 php 通过子 ID 获取第一个父级?
【发布时间】:2022-01-24 05:53:09
【问题描述】:

我有这张桌子:

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 找到第一个父母姓名,id :

例如:

如果我发送 6 id(shai) 我想显示名字是 mike(id:1) 的第一个父级,但我的查询只显示前一个父级,当我发送 6 作为 id 时它只显示 sam(id:5 )。 如何通过 SQL 查询或 PHP 代码找到第一个父项?

这是我的代码:

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;

【问题讨论】:

  • 请在成为会员 5 年后学会格式化您的帖子。
  • 这是 mysql v8,我有 mysql v5.7 @ProGu
  • 在 5.7 中 - 创建迭代存储过程。
  • 你能用一个例子解释更多或通过例子解决我的问题吗? @Akina

标签: php mysql sql recursive-query


【解决方案1】:
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小提琴here

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

【讨论】:

  • 谢谢,但是当我在 phpmyadmin sql 部分运行 CREATE FUNCTION get_most_parent 时返回 #1064 错误
  • @AminArjmand 不相关的问题。阅读帮助或创建另一个问题 - 关于通过 phpmyadmin 创建函数。
  • 应该添加这个来开始和结束工作DELIMITER $$ END$$ DELIMITER ;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
  • 2013-10-03
  • 2022-01-08
  • 2014-04-15
  • 1970-01-01
相关资源
最近更新 更多