Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否在单个查询中获取所有引用的用户?_Php_Mysql_Sql - Fatal编程技术网

Php 是否在单个查询中获取所有引用的用户?

Php 是否在单个查询中获取所有引用的用户?,php,mysql,sql,Php,Mysql,Sql,是否可以获取所有可能链接到UserID1的用户 例如: UserID1引用了UserID2和UserID5 UserID2引用了UserID3 UserID3引用了UserID4 UserID1页面上的结果: +用户ID2 +用户ID5 ++用户ID3 +++用户ID4 我目前的做法: $user_data['id']=1; $primary_referral_query=mysqli_query($conn, "SELECT username FROM users WHERE r

是否可以获取所有可能链接到UserID1的用户

例如:

UserID1引用了UserID2和UserID5

UserID2引用了UserID3

UserID3引用了UserID4

UserID1页面上的结果:

  • +用户ID2
  • +用户ID5
  • ++用户ID3
  • +++用户ID4
我目前的做法:

$user_data['id']=1;
$primary_referral_query=mysqli_query($conn, "SELECT username FROM users WHERE referrer=$user_data[id]");
while($primary_referral=mysqli_fetch_array($primary_referral_query))
{
    echo '+'.$primary_referral['username'].'<br>';
}
$secondary_referral_query=mysqli_query($conn, "SELECT a.username, b.username, c.username AS users_c_username FROM users AS a, users AS b, users AS c WHERE b.referrer = a.id AND a.id <> b.id AND c.referrer = b.id AND a.id=$user_data[id]");
while($secondary_referral=mysqli_fetch_array($secondary_referral_query))
{
    echo '++'.$secondary_referral['users_c_username'].'<br>';
}
$user_data['id']=1;
$primary\u reference\u query=mysqli\u query($conn,“从用户中选择用户名,其中referer=$user\u data[id]”);
while($primary\u reflection=mysqli\u fetch\u array($primary\u reflection\u query))
{
回显“+”.$primary_reference['username']。
; } $secondary\u reference\u query=mysqli\u query($conn,“从用户a、用户b、用户c中选择a.username、b.username、c.username作为用户c\u username,其中b.referer=a.id和a.id b.id和c.referer=b.id和a.id=$user\u data[id]); while($secondary\u reflection=mysqli\u fetch\u array($secondary\u reflection\u query)) { 回显'+'.$secondary_reference['users\u c_username'].
; }
存储分层数据的方法称为邻接列表(模型)

您有不同的选择:

1) 从数据库中读取所有数据,将其放入php数组中,并递归遍历它

例如:

2) 仅选择当前用户和子体,将其放入php数组中并递归遍历

SQL应该如下所示:

SELECT u1.username as lev1, u2.username as lev2, u3.username AS  as lev3, u4.username AS as lev4
FROM users AS u1
LEFT JOIN users AS u2 ON u2.referrer = u1.id
LEFT JOIN users AS u3 ON u3.referrer = u2.id
LEFT JOIN users AS u4 ON u4.referrer = u3.id
WHERE u1.id = 1;
我没有找到php代码的示例,但应该更难,因为您现在收到的数据是冗余的。还要注意:对于树中的每个新深度,您必须在DB select中添加一个连接

3) 递归PHP/MySQL

例如:

如果你没有太多的数据,我会选择选项1。或者最好选择另一种存储或检索数据的方式

我最喜欢的方式是


另一个关于嵌套集的有趣观点是:

存储分层数据的方法称为邻接列表(model)

您有不同的选择:

1) 从数据库中读取所有数据,将其放入php数组中,并递归遍历它

例如:

2) 仅选择当前用户和子体,将其放入php数组中并递归遍历

SQL应该如下所示:

SELECT u1.username as lev1, u2.username as lev2, u3.username AS  as lev3, u4.username AS as lev4
FROM users AS u1
LEFT JOIN users AS u2 ON u2.referrer = u1.id
LEFT JOIN users AS u3 ON u3.referrer = u2.id
LEFT JOIN users AS u4 ON u4.referrer = u3.id
WHERE u1.id = 1;
我没有找到php代码的示例,但应该更难,因为您现在收到的数据是冗余的。还要注意:对于树中的每个新深度,您必须在DB select中添加一个连接

3) 递归PHP/MySQL

例如:

如果你没有太多的数据,我会选择选项1。或者最好选择另一种存储或检索数据的方式

我最喜欢的方式是


关于嵌套集的另一个有趣的观点:

代码的结果是什么?请看。关于如何让所有子代记录链接到分层表中的给定记录,有几种不同的答案和想法。@我的代码的工作结果是我在问题中显示的结果(减去
+++UserID4
,因为我没有执行该循环)。代码的结果是什么?请查看。关于如何让所有子代记录链接到分层表中的给定记录,有几种不同的答案和想法。@我的代码的工作结果就是我在问题中所显示的结果(减去
+++UserID4
,因为我没有做那个循环)