0

所以我们有:

table users

id name password parent_id

第一个用户的 id 为 1,其他用户的 parent_id 为 1,所以我选择所有具有 parent_id == 1 的用户 - 他们是 1 的用户的孩子,没关系,但现在我需要选择具有所选用户之前的 parent_id 的用户,如果他们存在,当然

    user with id 1
   /      |     \
  /       |      \
 /        |       \
users with parent_id 1

user id 2    user id 3 id  user 4
|          |        |
|          |        |
|          |        |

和这里是一样的,我需要为每个用户选择所有具有 parent_id 2、3、4 的用户,它从上到下就像一个金字塔(三角形)

所以问题是我怎样才能做出一个查询来一次性选择它,而不是通过提取id然后进行其他查询来进行许多查询 - 我认为这不好

你有想法吗??

4

2 回答 2

0

这是一个涵盖您的问题的问题:
是否可以在单个查询中查询 MySQL 中的树结构表到任何深度?

以下查询仅适用于查找单个用户的子孙,是误解问题的产物!

您可以尝试将user表本身加入两次。

SELECT * FROM users as up 
JOIN users as u on up.id=u.parent_id 
JOIN users as uc on u.id=uc.parent_id 
WHERE up.id={$grandParentUserId}

别名:up = 用户的父母,u = 用户,us = 用户的孩子。
绝对不是一个漂亮的解决方案,但它是一个单一的请求。

于 2012-06-29T08:07:16.510 回答
0

我看到你正在使用 CI。你可以看看这个答案。和你的问题有点相关。您可以NULL先选择具有父 ID 的用户,然后填充他们的孩子

https://stackoverflow.com/a/9937130/876117

于 2012-06-29T08:38:58.263 回答