2

我有一张表格,列出了 MLM 的团队成员层次结构。我试图弄清楚如何在 MySQL 中最有效地查询表,以便我可以在 PHP 中输​​出结果。

我在研究中了解到嵌套查询或 PHPwhile循环中的嵌套查询并不理想,但是当我查看 MySQL 连接时,我看不到如何正确访问信息。

表值(表名称为 MLM):

ID  Upline   FName

1     1      Joe    (he is at the top of the hierarchy)
2     1      Jane   (Jane is directly under Joe)
3     2      Jack
4     3      Jill

要找出所有这些在乔手下报告的人的名字吗?

Select FName from MLM where Upline = 1;
and
Select FName from MLM where Upline in (Select FName from MLM where Upline = 1);
and
Select FName from MLM where Upline in (Select FName from MLM where Upline in (Select FName from MLM where Upline = 1));

这不是一个好的开始,而且不知道 Joe 下会有多少级别,它是不可扩展的。

您能否让我知道如何最好地查询此信息或mysql_fetch_array在 while 循环中组合 PHP 以查找和回显所有值?

4

2 回答 2

1

不为人所知,但您可以自己加入一个表。您必须为每个实例指定一个单独的别名,以便您可以根据需要引用它们。

以下查询将检索与 Joe 具有相同 Upline 的所有人员:

SELECT m2.* FROM MLM m1
JOIN MLM m2 ON m1.Upline = m2.Upline
WHERE m1.FName LIKE "Joe"

如果您只希望向乔报告的人,而不是乔本人,您可以执行以下操作:

SELECT m2.* FROM MLM m1
JOIN MLM m2 ON m1.Upline = m2.Upline
WHERE m1.FName LIKE "Joe"
AND m1.FName <> m2.FName
于 2012-10-02T03:53:48.280 回答
0

在数据库中表示分层数据很棘手。您可以考虑以下任何一项:-

  1. 重新设计您的表,以便轻松识别层次结构 - 检查此链接以更好地了解子查询层次结构的限制和问题在 MySQL 中管理分层数据
  2. 从表中选择 * 并在您的 php 代码中通过遍历结果来创建层次结构。

除此之外,如果您继续对子查询进行子查询,那么您将不会接近实际的解决方案。

于 2012-10-02T05:01:49.400 回答