相关疑难解决方法(0)

如何创建MySQL分层递归查询

我有一个MySQL表,如下所示:

id | name        | parent_id
19 | category1   | 0
20 | category2   | 19
21 | category3   | 20
22 | category4   | 21
......
Run Code Online (Sandbox Code Playgroud)

现在,我想要一个MySQL查询,我只提供id [例如说'id = 19']然后我应该得到它的所有子id [即结果应该有id',21,22']. ...而且,孩子们的等级不知道它可以变化....

另外,我已经有了使用for循环的解决方案.....如果可能的话,让我知道如何使用单个MySQL查询来实现相同的功能.

mysql sql recursive-query hierarchical-data

237
推荐指数
9
解决办法
25万
查看次数

递归mysql选择?

我看到了这个答案,我希望他是不正确的,就像有人不正确地说主键在列上而我无法在多列上设置它.

这是我的桌子

create table Users(id INT primary key AUTO_INCREMENT,
    parent INT,
    name TEXT NOT NULL,
    FOREIGN KEY(parent)
    REFERENCES Users(id)
);


+----+--------+---------+
| id | parent | name    |
+----+--------+---------+
|  1 |   NULL | root    |
|  2 |      1 | one     |
|  3 |      1 | 1down   |
|  4 |      2 | one_a   |
|  5 |      4 | one_a_b |
+----+--------+---------+
Run Code Online (Sandbox Code Playgroud)

我想选择用户ID 2并递归,所以我得到了所有直接和间接的孩子(所以id 4和5).

如何以这样的方式编写它?我在postgresql和sqlserver中看到了递归.

mysql recursion

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

用于递归结果的Laravel查询构建器?例如id,parent_id

所以我的数据结构如下:

id|parent_id|name
1 |null     |foo
2 |1        |bar
3 |2        |baz
Run Code Online (Sandbox Code Playgroud)

所以基本上foo->bar->baz.我很难理解如何使用laravel的查询构建器来获取子行的行,然后是它的祖先(直到parent_id == null).这可以用laravel完成吗?我已经完成了一些研究,Postgres RECURSIVE虽然MySQL没有(Postgres递归查询在遍历parent_id时更新字段的值).

我相信MySQL有类似的东西:如何在MySQL中进行递归SELECT查询?

但是我如何在Laravel中实现这个呢?

我的开始代码基本上是使用查询范围,但我只是没有做到正确:

Model::select('name')->getParent(3); //get baz and the ancestors of baz
protected function scopeGetParent($id) {
  $parent = Model::where('id', '=', $id);
  return $query->getParent($parent->parent_id);
}
Run Code Online (Sandbox Code Playgroud)

我想要的结果是:

name
baz
bar
foo
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

php mysql recursion laravel-4

6
推荐指数
3
解决办法
6407
查看次数

在mysql中递归选择

我有一个表格如下

TaskID  ParentTaskID
1       1
2       1
3       2
4       2
5       2
10      10
11      11
12      11
13      0
14      14
Run Code Online (Sandbox Code Playgroud)

如果taskid为1,我想得到如下结果

TaskID
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

如果是2那么

Taskid
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

如果它10然后10

意味着我想选择具有taskid = 1的行,其行具有parenttaskid = 1,其中行具有上述选择中的parenttaskid等等........

请使用这个小提琴http://sqlfiddle.com/#!2/9db0c3/6

mysql sql

5
推荐指数
1
解决办法
119
查看次数