MySQL查询帮助(用于PHP输出)

时间:2012-10-02 03:49:51

标签: mysql sql

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

我在研究中已经了解到PHP while循环中的嵌套查询或嵌套查询并不理想,但是当我查看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

要了解在Joe下报告的所有这些人的姓名?

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));

这不好开始,不知道乔下有多少级别,它不可扩展。

您能否告诉我如何最好地查询此信息,或者在while循环中组合PHP mysql_fetch_array以查找并回显所有值?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:0)

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

  1. 重新设计表,以便识别层次结构 - 检查此链接是为了更好地理解子查询层次结构Managing Hierarchical Data in MySQL的限制和问题 OR
  2. 从表格中选择*,并在php代码中通过迭代结果来创建层次结构。
  3. 除此之外,如果你继续查询子查询的子查询,你将不会接近实际的解决方案。