相关疑难解决方法(0)

如何在MySQL上正确循环存储函数?

我很难获得一个非常简单的存储过程.请考虑以下文章表格片段:

id    replaced_by     baseID
 1              2          0
 2              3          0
 3              0          0
Run Code Online (Sandbox Code Playgroud)

一个简单的分层表,使用copy-on-write.编辑文章时,当前文章的replacement_by字段将设置为其新副本的ID.

我添加了一个baseID字段,将来应该存储一篇文章的baseID.在上面的例子中,有一篇文章(例如id 3).它的baseID是1.

为了获取baseID,我创建了以下存储过程:

DELIMITER $$

CREATE FUNCTION getBaseID(articleID INT) RETURNS INT
BEGIN
    DECLARE x INT;
    DECLARE y INT;
    SET x = articleID;
    sloop:LOOP
        SELECT id INTO y FROM article WHERE replaced_by_articleID = x;
        IF y IS NOT NULL THEN
            SET x = y;
            ITERATE sloop;
        ELSE
            LEAVE sloop;
        END IF;  
    END LOOP;
    RETURN x;
END $$

DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

这看起来很简单,直到我实际调用函数使用:

SELECT getBaseID(3);
Run Code Online (Sandbox Code Playgroud)

我希望,函数返回1.我甚至愿意理解它可能需要一秒钟.相反,机器的CPU上升到100%(mysqld).

我甚REPEAT .. UNTIL …

mysql loops stored-functions

8
推荐指数
1
解决办法
2万
查看次数

用于邻接列表显示的递归PHP函数

我有一个像这样的数据库:

id  text           parent
1   Parent 1        0   
2   Child of 1      1   
3   Sibling         1   
4   Another Parent  0 
5   A first child   4
Run Code Online (Sandbox Code Playgroud)

所以我试图捕捉一个树形结构,我列出了父母.我知道另一个选项(我认为是嵌套的吗?)但是我现在要坚持这个.我现在正试图将数据从数据库中取出并放入PHP中的嵌套数组结构中.我有这样的功能:

class Data_Manager
{   
    public $connection = '';
    public $collection = array();

    function __construct() {
        $this->connection = mysql_connect('localhost', 'root', 'root');
        $thisTable = mysql_select_db('data');
            // error handling truncated
    }


    function get_all() {
        $arr = &$this->collection;

        $this->recurseTree('', 0, $arr);
        var_dump($arr);
    }

    function recurseTree($parent, $level, $arrayNode) {
        $result = mysql_query('SELECT * FROM tasks WHERE parent="' . $parent . …
Run Code Online (Sandbox Code Playgroud)

php recursion adjacency-list hierarchical-data

0
推荐指数
1
解决办法
5335
查看次数