【问题标题】:How to SELECT for the following in MySql?如何在 MySql 中选择以下内容?
【发布时间】:2012-05-01 05:13:50
【问题描述】:

我有一个用户系统,用户帐户可以拥有从属帐户。

为了表达这种关系,我有以下 mysql 表:

TABLE ACCOUNTS
ID
name

TABLE OWNEDACCOUNTS
accountID -> ACCOUNTS(ID)
ownerID -> ACCOUNTS(ID)

虽然从这些表中看不出来,但这种关系只能深入 2 层:

账户 -> 子账户 -> 子子账户

目前,我可以选择属于顶级帐户的所有子帐户:

SELECT  a.ID
FROM    accounts AS a
JOIN    ownedAccounts AS o
ON      o.accountID = a.ID
        AND o.ownerID = ?

但是,我真正想要的是选择属于单个顶级帐户的所有子帐户和所有子子帐户。我该怎么做?

感谢(提前)您的帮助

【问题讨论】:

    标签: php mysql select


    【解决方案1】:
    Select ...
    From accounts AS a
        Join ownedAccounts AS o
            On o.accountID = a.ID
        Join accounts AS owner1
            On owner1.ID = o.ownerID
        Left Join ownedAccounts AS o2
            On o2.accountID = owner1.ID
        Left Join accounts As owner2
            On owner2.ID = o2.ownerID
    Where o.ownerID = ?
    

    【讨论】:

    • 感谢您的回复,但我无法使其正常工作。它只返回一个 0 结果集。不知道我可能会错过什么......
    • @user1031947 - 可能并非所有帐户都有子帐户。我已将联接更改为左联接。我假设每个帐户都有一个所有者,所以我将前两个联接保留为内部联接。
    【解决方案2】:

    这应该列出您拥有的每个帐户,以及它的订阅数和子订阅数。希望这是一个好的起点。

    SELECT  a.ID, count(sub.accountID), count(subsub.accountID)
    FROM    accounts AS a
    LEFT JOIN    ownedAccounts AS sub ON      sub.ownerID = a.ID
    LEFT JOIN    ownedAccounts AS subsub ON      subsub.ownerID = sub.accountID
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 2022-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多