gpt4 book ai didi

php - 通过给定的 ID 获取所有相关的父 ID 和子 ID

转载 作者:行者123 更新时间:2023-12-02 03:09:51 31 4
gpt4 key购买 nike

我有一个具有以下结构的表“表”

   ID   LinkedWith
12 13
13 12
14 13
15 14
16 0
17 0
18 21

我们得到一个 ID 说“12”(或者可能是 15),我们必须用它来获取所有其他相关的 ID。

这里 12 链接到 13,14 链接到 13,15 链接到 14,依此类推。在我们的例子中,有 4 个 ID 间接相关,可能有很多。例如,在上述情况下,我们需要 IDS 12,13,14,15 的最终结果。

我有这个不完整的功能,但想不出进一步的办法。我知道我们可能需要递归函数,但不确定该怎么做

function testFetchRelated($id){
$arrayIDs = array($id);


try{
$dbh = new PDOConfig("db_test");
$stmt = $dbh->prepare("SELECT * FROM table WHERE ID='".$id."' OR LinkedWith='".$id."'");
$stmt->execute();

if($stmt->rowCount()>0){
$fetch = $stmt->fetchAll(PDO::FETCH_OBJ);

foreach($fetch as $f){
if($f->LinkedWith>0){
array_push($arrayIDs, $f->LinkedWith);
}

if($f->ID!=$id){
array_push($arrayIDs, $f->ID);
}
}
}else{

}

$stmt = null;
$dbh = null;

return $arrayIDs;
}catch(PDOException $e){
echo "AN ERROR OCCURRED: ".$e->getMessage();
}

谁能帮我解决这个问题

最佳答案

我已经把它搞砸了,它似乎确实在 MySQL 过程中做你想做的事:-

DELIMITER ;;

DROP PROCEDURE IF EXISTS `find_relations`;;
CREATE PROCEDURE `find_relations`(IN_id INT)
BEGIN

CREATE TABLE ids_tmp
(
ID INT(11),
PRIMARY KEY (ID)
);

INSERT INTO ids_tmp
SELECT a.ID FROM some_table a WHERE a.LinkedWith = IN_id
UNION
SELECT a.LinkedWith FROM some_table a WHERE a.ID = IN_id
UNION
SELECT a.LinkedWith FROM some_table a WHERE a.LinkedWith = IN_id
UNION
SELECT a.ID FROM some_table a WHERE a.ID = IN_id;

WHILE (ROW_COUNT() > 0) DO
INSERT INTO ids_tmp
SELECT a.ID FROM some_table a
INNER JOIN ids_tmp b ON a.LinkedWith = b.ID
LEFT OUTER JOIN ids_tmp c ON a.ID = c.ID
WHERE c.ID IS NULL
UNION
SELECT a.ID FROM some_table a
INNER JOIN ids_tmp b ON a.ID = b.ID
LEFT OUTER JOIN ids_tmp c ON a.LinkedWith = c.ID
WHERE c.ID IS NULL;
END WHILE;

SELECT ID FROM ids_tmp;

DROP TABLE IF EXISTS ids_tmp;

END;;

DELIMITER ;

您可以使用 CALL find_relations(12);

调用它

没有完全调试它(最好使用临时表,但它依赖于在各种单个查询中多次访问同一个表,MySQL 不支持临时表),但希望能给你一些想法.

如果你想实际使用它,那么可能需要确保创建的表的名称在 session 中是唯一的。

关于php - 通过给定的 ID 获取所有相关的父 ID 和子 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40541982/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com